如何使用 PIG 将数据从本地系统加载到 hdfs
Posted
技术标签:
【中文标题】如何使用 PIG 将数据从本地系统加载到 hdfs【英文标题】:how to load the data from local system to hdfs using PIG 【发布时间】:2015-03-05 17:23:49 【问题描述】:我有一个 csv 文件 sample.csv
并位于 \home\hadoop\Desktop\script\sample.csv
。
我尝试使用
movies = load '/home/hadoop/Desktop/script/sample.csv' using PigStorage(',') as (id,name,year,rating,duration);
但是这个 PIG 语句给出了一个错误,但是在给出dump movies;
的语句时,它抛出错误并显示输入和输出失败。
请建议我如何使用 pig 语句加载数据。
【问题讨论】:
你能先把它加载到HDFS吗? 我正在尝试使用 PIG 语句加载文件。 Pig 在集群的工作节点上运行,因此没有单一的本地文件系统。如果您只有一个节点,那么您可能会通过执行类似“file:///home/hadoop/Desktop/script/sample.csv”之类的操作来获得好运,但它不适用于多节点集群。跨度> 我在 mapreduce 模式下运行 pig。我有 pseduo 设置模式。 【参考方案1】:如果你的输入文件在本地,那么你可以通过输入 pig -x local 进入 grunt shell
如果你进入 grunt shell 然后你可以输入下面的语句
record = LOAD '/home/hadoop/Desktop/script/sample.csv' using PigStorage(',') as (id:int,name:chararray,year:chararray,rating:chararray,duration:int);
dump record;
如果您的输入文件不在本地,那么首先您需要使用以下命令将该文件从本地复制到 HDFS
hadoop dfs -put <path of file at local> <path of hdfs dir>
将文件加载到 HDFS 后,您可以通过键入 pig 进入 map reduce 模式
再次打开 grunt shell。 ia 假设您的 HDFS 位置类似于下面的 LOAD 语句
record = LOAD '/user/hadoop/inputfiles/sample.csv' using PigStorage(',') as (id:int,name:chararray,year:chararray,rating:chararray,duration:int);
dump record;
【讨论】:
【参考方案2】:您也可以在 grunt shell 中使用 copyFromLocal 命令将本地文件移动到 hdfs。
【讨论】:
【参考方案3】:pig -x local
在本地模式下打开 pig shell,如果您的文件存在于 hdfs,那么您可以使用pig
打开授权 shell。
$pig -x local
grunt> movies = load '/home/hadoop/Desktop/script/sample.csv' using PigStorage(',') as (id:int,name:chararray,year:chararray,rating:chararray,duration:chararray);
grunt> dump movies;
【讨论】:
以上是关于如何使用 PIG 将数据从本地系统加载到 hdfs的主要内容,如果未能解决你的问题,请参考以下文章
从 ES 加载数据并使用 pig 在 HDFS 中存储为 avro