如何使用 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 。 我尝试使用

加载 PIG
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的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sqoop 将来自 MySQL 的数据加载到 PIG

将数据从 HDFS 加载到 HBASE

从 ES 加载数据并使用 pig 在 HDFS 中存储为 avro

如何读取pig运行结果part

使用 mongoimport 将数据从 HDFS 导入 MongoDB

如何从 HDFS 获取和查看 oracle BLOB (Image) 数据到本地系统?