我的目标是能够识别MapR集群文件系统中Streams(文件)的所有路径。
解决这个问题我已经确定在MapR集群中,Streams存储为具有只读权限的MapR表的链接。
使用以下方法可以轻松发现这些:
ls -alR -1 /mapr |grep 'lr-------- 1 mapr mapr'
lr-------- 1 mapr mapr 2 Jan 24 13:02 f -> mapr::table::2129.42.131292
lr-------- 1 mapr mapr 2 Jan 27 12:49 transactions -> mapr::table::2129.48.393912
lr-------- 1 mapr mapr 2 Jan 3 12:52 customers -> mapr::table::2129.36.131280
lr-------- 1 mapr mapr 2 Jan 3 16:47 creditcards -> mapr::table::2129.39.131286
lr-------- 1 mapr mapr 2 Jan 3 12:40 databroker -> mapr::table::2129.33.131274
lr-------- 1 mapr mapr 2 May 25 13:00 drill_test -> mapr::table::2049.12355.3399972
lr-------- 1 mapr mapr 2 Jun 14 05:23 geo -> mapr::table::2049.22145.4864546
lr-------- 1 mapr mapr 2 Jun 7 10:36 bonus -> mapr::table::2049.26487.4074656
还存在两个问题:
显示的输出是Stream文件和MapR-DB表;可以使用maprcli命令执行进一步的识别,但为了做到这一点,我需要完整的路径,以便将文件传输到另一个程序......
使用此处的解决方案可以轻松获取路径:ls command: how can I get a recursive full-path listing, one line per file?
但是 grep 命令中的识别掩码无法应用于候选名单,我留下了所有列表中的文件列表。
我认为可能有用的一种方法是使用以下方法提取相关的特定文件链接:
ls -alR -1 /mapr |grep 'lr-------- 1 mapr mapr' |awk '{ print $9 }'
导致:
f
transactions
customers
creditcards
databroker
drill_test
geo
bonus
然后将它们导入 find 循环(或“?”),但这表现不佳。
有没有人有一种方法可以递归地输出路径和文件名以及权限,允许过滤,如GREP命令所示?我正在做的(我认为安全的)假设是在集群内,只有MapR-DB表和MapR Streams才具有这些权限,并且从数据管理的角度来看,识别这两者将提供好处,因为服务出现在集群中开始编写我们尚未在下游系统中捕获的数据(报告,ETL等)。
更好的是,魔术子弹正在生成一个在集群中注册的MapR Streams列表,其他一些(更可靠)的方式。 ;)