hadoop使用pig进行数据分析时遇到的问题(10020号端口问题,连接拒绝)

编写hadoop应用程序的map与reduce并不难,但是要完整控制整个框架的编写,需要对Java语言非常非常熟悉。而我一直做Linux下C编程的人,只能寻找更加适合我的方式。Apache项目下给出了一个可以较简单地操作hadoop的MapReduce的工具,这就是pig。它在 MapReduce的基础上创建了更简单的过程语言抽象,为 Hadoop应用程序提供了一种更加接近结构化查询语言 (SQL)的接口。不需要编写一个单独的 MapReduce应用程序,可以用 Pig Latin语言写一个脚本,在集群中自动并行处理与分发该脚本。

Pig使用的两种模式:

第一种是 Local(本地)模式,它不需要依赖 Hadoop Hadoop分布式文件系统 (HDFS),在该模式中,所有操作都在本地文件系统上下文中的单一 Java虚拟机 (JVM)上执行。另一种模式是 MapReduce模式,它使用了 Hadoop文件系统和集群。我主要是利用hadoop集群对数据进行分析,所以只关注MapReduce模式。

另外,pig与hive的安装及其注意的问题,前面的博客中已经提及。

在master节点上安装pig之后,终端键入:

pig

或者

pig -x mapreduce

如果想以local模式启动,输入:
pig -x local

接下来测试数据,统计Linux系统下passwd的信息,先复制文件到hdfs

grunt> cd hdfs:///
grunt> cd /test
grunt> copyFromLocal /etc/passwd  passwd
然后执行Pig语句:

grunt> passwd = LOAD '/test/passwd' USING PigStorage(':') AS (user:chararray,passwd:chararray, uid:int, gid:int, userinfo:chararray, home:chararray,shell:chararray);
grunt> DUMP passwd
出现了下面的问题:

[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias passwd. Backend error : javadoop/192.168.0.2 to master.hadoop:10020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more deta
Details at logfile: /usr/local/pig/pig_1433189043690.log
查看错误信息可知,10020号端口可能没开,利用下面命令进行查看:
lsof | grep 10020
果然没开,然后查看这篇博客 hadoop常用端口及定义方法,发现这个10020号端口是 mapreduce.jobhistory.address。查看hadoop配置文件mapred-site.xml中已经有了这个定义:

    <property>  
          <name>mapreduce.jobhistory.address</name>  
          <value>master.hadoop:10020</value>  
     </property>  
那么服务还没有起来,只可能是在启动hadoop集群时候start-all.sh里面没有包含这一项?那么进行手动启动。

mr-jobhistory-daemon.sh start historyserver

启动pig再次执行上面的过程,即可成功执行。为了方便执行可以将pig命令放入一个脚本,命名为passwd.pig:

passwd = LOAD '/test/passwd' USING PigStorage(':') AS (user:chararray,passwd:chararray, uid:int, gid:int, userinfo:chararray, home:chararray,shell:chararray);
grp_shell = GROUP passwd BY shell;
counts = FOREACH grp_shell GENERATE group, COUNT(passwd);
DUMP counts;
然后在终端中键入:
pig passwd.pig
即可完成。









  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何使用R语言进行数据爬取,生成csv文件,将数据上传Linux,并使用Hadoop和Hive进行数据分析。 首先,我们可以使用R语言中的一些库(如`rvest`、`httr`等)来进行数据爬取,然后将数据处理并保存为csv文件。下面是一个简单的示例代码: ``` library(rvest) library(httr) # 发送请求获取网页内容 url <- "https://www.example.com" response <- GET(url) content <- content(response, as = "text") # 使用rvest库解析网页内容并提取数据 html <- read_html(content) data <- html %>% html_nodes("table") %>% html_table(fill = TRUE) # 将数据保存为csv文件 write.csv(data, file = "data.csv", row.names = FALSE) ``` 接着,我们可以使用`scp`命令将生成的csv文件上传到Linux服务器上。假设您的csv文件保存在本地的`/path/to/data.csv`,Linux服务器的IP地址是`123.45.67.89`,用户名是`user`,则可以使用以下命令上传文件: ``` scp /path/to/data.csv [email protected]:/path/to/remote/folder/ ``` 一旦文件上传到Linux服务器上,我们可以使用Hadoop和Hive进行数据分析。首先,我们需要将csv文件加载到Hadoop文件系统中。可以使用以下命令将文件复制到Hadoop文件系统中: ``` hdfs dfs -copyFromLocal /path/to/remote/folder/data.csv /input/ ``` 然后,我们可以使用Hive来创建表并加载数据。假设您的csv文件中有两列数据`col1`和`col2`,则可以使用以下命令在Hive中创建表: ``` CREATE TABLE my_table ( col1 STRING, col2 STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` 接着,我们可以使用以下命令将csv文件中的数据加载到Hive表中: ``` LOAD DATA INPATH '/input/data.csv' INTO TABLE my_table; ``` 现在,我们可以使用Hive来执行各种查询和分析操作。例如,要计算`col1`中每个值的出现次数,可以使用以下查询: ``` SELECT col1, COUNT(*) as count FROM my_table GROUP BY col1; ``` 希望这些示例代码和命令可以帮助您开始使用R语言进行数据爬取和使用Hadoop和Hive进行数据分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值