我使用以下命令将一些文件从目录复制到目录
hadoop distcp -Dmapreduce.job.queuename=adhoc /user/comverse/data/$CURRENT_DATE_NO_DASH_*/*rcr.gz /apps/hive/warehouse/arstel.db/fair_usage/fct_evkuzmin04/file_rcr/
Run Code Online (Sandbox Code Playgroud)
我在它完成之前停止了 scipt,剩下的很多.distcp.tmp.attempt文件在 dst 目录中移动
现在我想清理 dst 目录。运行后
hadoop fs -rm -skipTrash /apps/hive/warehouse/arstel.db/fair_usage/fct_evkuzmin04/file_mta/*
Run Code Online (Sandbox Code Playgroud)
大多数文件都被删除了,但有些文件仍然存在(至少 HUE 是这样显示的)。奇怪的是,每次运行hadoop fs -rm -skipTrash,根据HUE,剩余文件的数量或多或少都会发生变化。
我试过
hadoop fs -ls /apps/hive/warehouse/arstel.db/fair_usage/fct_evkuzmin04/file_mta/
Run Code Online (Sandbox Code Playgroud)
并看到一些应该删除的文件仍然存在。然后我跑
hadoop fs -rm -skipTrash /apps/hive/warehouse/arstel.db/fair_usage/fct_evkuzmin04/file_mta/*
Run Code Online (Sandbox Code Playgroud)
十几次,总是有更多的文件要删除(仍然有)。怎么了?
还
每次我以色调刷新页面时,文件数量都会增加。哈普。
编辑
似乎在命令行中停止 distcp 实际上并没有终止工作。这就是原因。
我尝试在发送 GET 请求时返回 JSONObject。
方法
@RequestMapping(value = "/{businessId}/{orderId}/{reportId}", method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<JSONObject> getReport(@PathVariable("businessId") String businessId,
@PathVariable("orderId") String orderId,
@PathVariable("reportId") Long reportId) throws JSONException {
return new ResponseEntity<JSONObject>(reportService.getReportJSON(), HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
我从文件中获取 json。这是一个单一的 json 对象。在一行。我像这样将它解析为 JSONObject
fs = FileSystem.get(uri, conf);
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(fs.open(path)));
line = reader.readLine();
while (line != null) {
jsonObjectList = new JSONObject(line);
line = reader.readLine();
}
return jsonObjectList;
Run Code Online (Sandbox Code Playgroud)
这就是我的文件的样子。
{"reportId":"1","description":"????????????????????????","orderId":"357","businessId":"??????????1","tables":[{"name":"???????","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[2571,5287,4587,7705,3675,3743,7423]},{"name":"???????","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[7552,3107,6477,4967,9106,7859,9060]},{"name":"???????????????","fields":[{"name":"0-17","type":"number"},{"name":"18-24","type":"number"},{"name":"25-34","type":"number"},{"name":"35-44","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"},{"name":"45-54","type":"number"}],"data":[7552,3107,6477,4967,9106,7859,9060]}]}
Run Code Online (Sandbox Code Playgroud)
我使用邮递员来检查我的方法。这是我得到的错误
{
"timestamp": 1504020107350,
"status": 406,
"error": "Not …Run Code Online (Sandbox Code Playgroud) 我有一个 Spring 应用程序,它使用 WebHDFS 从 HDFS 读取文件。当我在 IDEA 中测试它时,它可以工作。但是在我构建项目并在本地虚拟机或连接到 HDFS 的服务器上部署 Docker 映像后,我得到:
AuthenticationException: Unauthorized
Run Code Online (Sandbox Code Playgroud)
在我的本地机器上,我必须定期初始化令牌
kinit
Run Code Online (Sandbox Code Playgroud)
用于认证。如果我不这样做,我会得到同样的错误。我在服务器上测试了没有 Docker 的应用程序,它也可以工作。我认为 Docker 映像没有看到令牌。但我不知道该怎么办。
Kerberos 用于安全。
有什么建议吗?
我有一个 krb5.conf 文件。我创建了一个密钥表并按照此处的说明进行了检查。
在 docker 文件中,我将其全部添加到容器中
FROM java:8
ADD krb5.conf /etc/krb5.conf
ADD evkuzmin.keytab /etc/evkuzmin.keytab
ADD scripts/ /opt/scripts/
ADD report.jar report.jar
RUN sh -c 'touch report.jar'
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://audpro_mongo/report","-Djava.security.egd=file:/dev/./urandom","-jar","/report.jar","/opt/scripts/init-keytab.sh"]
Run Code Online (Sandbox Code Playgroud)
并尝试在 init-keytab.sh 中对其进行初始化
#!/bin/bash
kinit EvKuzmin@REALM -k -t /etc/evkuzmin.keytab
Run Code Online (Sandbox Code Playgroud)
但是每次我尝试访问受保护的集群时,都会收到未经授权的错误。当我检查我的密钥表时
klist -k evkuzmin.keytab
Run Code Online (Sandbox Code Playgroud)
我找不到 evkuzmin.keytab。
为什么?
我使用 Oracle 虚拟机和 docker quickstrat 终端来测试本地的所有内容。Keytab 在服务器上生成并复制到本地机器上的项目中。
编辑
我使用检查图像中的文件
docker run -it --entrypoint sh <image-name>
Run Code Online (Sandbox Code Playgroud)
他们在场。