小编Evg*_*nii的帖子

hadoop fs -rm -skipTrash 不起作用

我使用以下命令将一些文件从目录复制到目录

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 实际上并没有终止工作。这就是原因。

hadoop rm distcp

5
推荐指数
2
解决办法
2万
查看次数

Spring ResponseEntity<JSONObject> HttpMediaTypeNotAcceptableException

我尝试在发送 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 json

5
推荐指数
1
解决办法
1万
查看次数

Docker Kerberos WebHDFS AuthenticationException:未经授权

我有一个 Spring 应用程序,它使用 WebHDFS 从 HDFS 读取文件。当我在 IDEA 中测试它时,它可以工作。但是在我构建项目并在本地虚拟机或连接到 HDFS 的服务器上部署 Docker 映像后,我得到:

AuthenticationException: Unauthorized
Run Code Online (Sandbox Code Playgroud)

在我的本地机器上,我必须定期初始化令牌

kinit
Run Code Online (Sandbox Code Playgroud)

用于认证。如果我不这样做,我会得到同样的错误。我在服务器上测试了没有 Docker 的应用程序,它也可以工作。我认为 Docker 映像没有看到令牌。但我不知道该怎么办。

Kerberos 用于安全。

有什么建议吗?

spring kerberos hdfs docker webhdfs

5
推荐指数
1
解决办法
3685
查看次数

如何在docker中初始化密钥表?

我有一个 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)

他们在场。

kerberos docker keytab

4
推荐指数
1
解决办法
8723
查看次数

标签 统计

docker ×2

kerberos ×2

spring ×2

distcp ×1

hadoop ×1

hdfs ×1

json ×1

keytab ×1

rm ×1

webhdfs ×1