Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中从HDFS sequencefile加载数据_Python_Hadoop_Mapreduce_Hive_Sequencefile - Fatal编程技术网

如何在python中从HDFS sequencefile加载数据

如何在python中从HDFS sequencefile加载数据,python,hadoop,mapreduce,hive,sequencefile,Python,Hadoop,Mapreduce,Hive,Sequencefile,我运行了一个map reduce程序来读取HDFS文件,如下所示: hadoop jar /opt/mapr/hadoop/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-dev-streaming.jar -Dmapred.reduce.tasks=1000 -file $homedir/mapper.py -mapper $homedir/mapper.py -file $homedir/reducer.py -reducer $homedir/

我运行了一个map reduce程序来读取HDFS文件,如下所示:

hadoop jar /opt/mapr/hadoop/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-dev-streaming.jar -Dmapred.reduce.tasks=1000  -file $homedir/mapper.py -mapper $homedir/mapper.py -file $homedir/reducer.py -reducer $homedir/reducer.py   -input /user/data/* -output /output/ 2> output.text
任何需要确认的内容,路径/user/data/*包含文件夹,包括文件,/user/data/*将迭代所有子文件夹下的所有文件,对吗

hdfs文本文件的每一行都包含一个JSON字符串,因此映射程序按如下方式读取该文件:

for line in sys.stdin:
    try:
        object = json.loads(line)
但是HDFS的所有者将文件从文本更改为sequencefile。我发现MapReduce程序输出了很多零大小的文件,这可能意味着它没有成功地从HDFS读取文件

我应该将什么更改为代码,以便可以读取sequencefile?我还有一个配置单元外部表,用于根据mapreduce的输出执行聚合和排序,并且配置单元以前存储为TEXTFILE,我是否应该更改为存储为SEQUENCEFILE

谢谢,

看一看

在mapreduce作业之前在python文件下方运行
输入:您的序列文件
输出:您对mapreduce的输入

import sys

from hadoop.io import SequenceFile

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print 'usage: SequenceFileReader <filename> <output>'
    else:
        reader = SequenceFile.Reader(sys.argv[1])

    key_class = reader.getKeyClass()
    value_class = reader.getValueClass()

    key = key_class()
    value = value_class()

    #reader.sync(4042)
    position = reader.getPosition()
    f = open(sys.argv[2],'w')
    while reader.next(key, value):
        f.write(value.toString()+'\n')
    reader.close()
    f.close()
导入系统 从hadoop.io导入SequenceFile 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 如果len(sys.argv)<3: 打印“用法:SequenceFileReader” 其他: reader=SequenceFile.reader(sys.argv[1]) key\u class=reader.getKeyClass() value\u class=reader.getValueClass() key=key\u class() value=value\u class() #reader.sync(4042) position=reader.getPosition() f=打开(sys.argv[2],'w') while reader.next(键、值): f、 写入(value.toString()+'\n') reader.close() f、 关闭() 您现在不必更改原始python文件。

请查看

在mapreduce作业之前在python文件下方运行
输入:您的序列文件
输出:您对mapreduce的输入

import sys

from hadoop.io import SequenceFile

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print 'usage: SequenceFileReader <filename> <output>'
    else:
        reader = SequenceFile.Reader(sys.argv[1])

    key_class = reader.getKeyClass()
    value_class = reader.getValueClass()

    key = key_class()
    value = value_class()

    #reader.sync(4042)
    position = reader.getPosition()
    f = open(sys.argv[2],'w')
    while reader.next(key, value):
        f.write(value.toString()+'\n')
    reader.close()
    f.close()
导入系统 从hadoop.io导入SequenceFile 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 如果len(sys.argv)<3: 打印“用法:SequenceFileReader” 其他: reader=SequenceFile.reader(sys.argv[1]) key\u class=reader.getKeyClass() value\u class=reader.getValueClass() key=key\u class() value=value\u class() #reader.sync(4042) position=reader.getPosition() f=打开(sys.argv[2],'w') while reader.next(键、值): f、 写入(value.toString()+'\n') reader.close() f、 关闭()
您现在不必更改原始python文件。

谢谢,我是否应该更改hadoop stream作业命令以运行此map reduce python脚本?我粘贴的第一个代码块。如果输入目录相同,则不必更改作业提交命令。您必须更改映射器。py谢谢。我使用hadoop流进行处理,mapper从stdint读取数据,但您的代码直接从代码中的文件读取(reader=SequenceFile.reader(“您的文件路径”)。如何从stdin中读取sequencefile?我看到一些帖子说将其添加到运行hadoop作业的命令中-inputformat SequenceFileAstextInputFormat非常感谢您的脚本将sequencefile转换为文本字符串,这样我就可以让代码像以前一样工作。但是这个文件的输出在本地磁盘上,但不是HDFS,对吗?我的hadoop mapreduce从HDFS获取输入。另外,我应该启用该参数吗-inputformat SequenceFileAstextInputFormatThank,我是否应该更改hadoop流作业命令以运行此map reduce python脚本?我粘贴的第一个代码块。如果输入目录相同,则不必更改作业提交命令。您必须更改映射器。py谢谢。我使用hadoop流进行处理,mapper从stdint读取数据,但您的代码直接从代码中的文件读取(reader=SequenceFile.reader(“您的文件路径”)。如何从stdin中读取sequencefile?我看到一些帖子说将其添加到运行hadoop作业的命令中-inputformat SequenceFileAstextInputFormat非常感谢您的脚本将sequencefile转换为文本字符串,这样我就可以让代码像以前一样工作。但是这个文件的输出在本地磁盘上,但不是HDFS,对吗?我的hadoop mapreduce从HDFS获取输入。另外,我应该启用该参数吗-inputformat序列文件AstextInputFormat