基于avro的文件浏览和简单操作实用程序

avroknife的Python项目详细描述


关于

Build Status

这个项目提供了一个用于浏览和简单 操作基于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包。
  • 提供以下执行模式(runavroknife -hfor 详细信息):
    • 打印出数据存储的架构,
    • 将数据存储转储为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
    

    如果要访问hdfspydooppython库需要 安装在系统中。您可以按照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-devlibssl-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版下授权的

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误