基于avro的文件浏览和简单操作实用程序
avroknife的Python项目详细描述
关于
这个项目提供了一个用于浏览和简单 操作基于avro的文件。
Apache Avro是序列化格式 被发明成一种独立于语言的交流方式 Hadoop数据处理任务。Hadoop公司 任务产生的输出在抽象层次上可以看作是 相同类型的对象列表。实际上,当使用avro格式时, 此列表在文件系统中表示为包含 许多avro格式的文件,其中每个文件具有相同的架构。我们打电话 这个目录是avro数据存储。
avroknife允许浏览和简单地操作avro数据 商店。它的灵感来自avro库自己的工具avro-tools 它作为*.jar文件随库一起分发。除了 特殊功能的差异,主要的哲学 两者的区别在于avroknife在整体上起作用 avro数据存储,而avro-tools操作单个avro文件。
功能
- 访问本地文件系统中的avro数据存储,以及 在hadoop分布式文件系统(hdfs)中。
- 注意,要访问hdfs,您需要有pydoop 安装了python包。
- 打印出数据存储的架构,
- 将数据存储转储为json,
- 将数据存储中选定的记录转储为新的数据存储,
- 将选定记录中的字段转储到文件系统或标准输出,
- 打印数据存储中的记录数。
- 记录的索引范围,
- 对返回记录数的限制,
- 字段的值。
用法示例
假设我们有一个可用的avro数据存储 /user/$USER/example_data_storehdfs目录:
$ hadoop fs -ls example_data_store Found 4 items -rw-r--r-- 1 mafju supergroup 408 2014-09-18 11:36 /user/mafju/example_data_store/part-m-00000.avro -rw-r--r-- 1 mafju supergroup 449 2014-09-18 11:36 /user/mafju/example_data_store/part-m-00001.avro -rw-r--r-- 1 mafju supergroup 364 2014-09-18 11:36 /user/mafju/example_data_store/part-m-00002.avro -rw-r--r-- 1 mafju supergroup 429 2014-09-18 11:36 /user/mafju/example_data_store/part-m-00003.avro
首先,让我们检查数据存储的模式
$ avroknife getschema example_data_store { "namespace": "avroknife.test.data", "type": "record", "name": "User", "fields": [ { "type": "int", "name": "position" }, { "type": "string", "name": "name" }, { "type": [ "int", "null" ], "name": "favorite_number" }, { "type": [ "string", "null" ], "name": "favorite_color" }, { "type": [ "bytes", "null" ], "name": "secret" } ] }
然后,让我们列出它的所有记录:
$ avroknife tojson example_data_store {"position": 0, "name": "Alyssa", "favorite_number": 256, "favorite_color": null, "secret": null} {"position": 1, "name": "Ben", "favorite_number": 4, "favorite_color": "red", "secret": null} {"position": 2, "name": "Alyssa2", "favorite_number": 512, "favorite_color": null, "secret": null} {"position": 3, "name": "Ben2", "favorite_number": 8, "favorite_color": "blue", "secret": "MDk4NzY1NDMyMQ=="} {"position": 4, "name": "Ben3", "favorite_number": 2, "favorite_color": "green", "secret": "MTIzNDVhYmNk"} {"position": 5, "name": "Alyssa3", "favorite_number": 16, "favorite_color": null, "secret": null} {"position": 6, "name": "Mallet", "favorite_number": null, "favorite_color": "blue", "secret": "YXNkZmdm"} {"position": 7, "name": "Mikel", "favorite_number": null, "favorite_color": "", "secret": null}
现在,让我们选择favorite_color属性所在的记录 等于blue,记录的索引为5个较大的:
$ avroknife tojson --select favorite_color="blue" --index 5- example_data_store {"position": 6, "name": "Mallet", "favorite_number": null, "favorite_color": "blue", "secret": "YXNkZmdm"}
接下来,我们提取所有记录的name属性的值 其中favorite_color属性等于blue:
$ avroknife extract --value_field name --select favorite_color="blue" example_data_store Ben2 Mallet
请注意,如果数据存储位于本地文件系统中,则 必须在其路径前面加上local:,例如
$ avroknife tojson local:example_data_store
就这样。运行avroknife -h以了解有关其他模式和 选项avroknife。
安装
该项目在pypi存储库中可用,因此在order中安装 它,您需要这样做
sudo pip install avroknife
如果要访问hdfs,pydooppython库需要 安装在系统中。您可以按照Pydoop’s documentation page上的说明操作 以便继续安装。在ubuntu 14.04上,安装 pydoop可以归结为以下步骤:
- 安装Hadoop。如果要在 所谓的伪分布式模式,我建议使用cloudera Hadoop发行版。这可以通过遵循cloudera的 step-by-step guide。 除了cloudera的hadoop-0.20-conf-pseudo包 在指南中提到的存储库中,还必须安装 hadoop-client包。
- 确保java jdk安装正确。这可以通过
执行以下步骤。
- 确保安装了java jdk。这可以通过 正在安装openjdk-7-jdk包,即, sudo apt-get install openjdk-7-jdk。
- 确保设置了JAVA_HOME环境变量 是的。这可以通过添加行来完成 export JAVA_HOME="/usr/lib/jvm/default-java"输入 /etc/profile.d/my_env_vars.sh文件。
- 安装以下ubuntu包:python-dev, libssl-dev,即sudo apt-get install python-devlibssl-dev。
- 通过pip安装pydoop包,即, sudo -i pip install pydoop。
故障排除
在我安装了hadoop(cdh 4.7.0)的系统(ubuntu 14.04)上, 每次我访问stderr时,都会在上面打印以下消息 硬盘:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details
结果发现,在pydoop库加载的jar中, slf4jjar丢失(指向它的符号链接已断开)。整齐 要修正此问题i
- 删除了已断开的符号链接 sudo rm /usr/lib/hadoop/client/slf4j-log4j12.jar
- 创建了正确的符号链接 sudo ln -s/usr/share/java/slf4j-log4j12.jar/usr/lib/hadoop/client/slf4j-log4j12.jar (您需要安装libslf4j-java包,以便 让目标jar文件存在)。
历史记录
初版avroknife创建于2013年3月。这个 脚本已被信息推理的开发人员使用 服务于 OpenAIREplus 项目。
许可证
该代码是在apache许可2.0版下授权的