Nutch+Hadoop环境搭建

2019-03-28 14:17|来源: 网络

以前搭建环境或是配置软件从来都没有留Tips的习惯,但实践证明这是错误的——做过不等于记得怎么做,遇到过的错误也不等于今后就不是错误了。Nutch跟Hadoop的搭建困扰了我很久,但回头看看又觉得真正有些问题的其实就几个关键点,所以觉得花些时间写个简单流程,缅怀一下最近的探索,也希望能给想要搭建Nutch或hadoop的同学提供一些帮助。欢迎大家指正。 

想要说明一下的是,虽然说hadoop诞生于nutch,但现在hadoop已经完全独立为一个分布式框架,我们可以简单地理解为nutch只是跑在hadoop基础之上的一个分布式应用程序(实现的功能是开源的搜索引擎:crawl+index+search)。根据我的实践,Nutch+hadoop的配置关键还是在于hadoop环境的搭建。

Hadoop 环境搭建

1.     硬件环境及软件选择

硬件环境:2台Fedora虚拟机(我自己实验的时候用了4台,有两台在另外一位同学的机子上,所以现在就不占用了),机器情况如下表:

计算机名

IP

内存

角色

Namenode

172.18.218.34

1G

Namenode+datanode

Datanode1

172.18.218.44

512M

Datanode

另外,两个linux系统都创建了一个名为hadoop的用户。

至于nutch,我选择的是1.2版本,因为这个版本集成了Hadoop,不用再单独去下载Hadoop,而且兼容性较好。

下载地址:http://apache.etoak.com//nutch/ ,如果有需要,也可以从我这里拷贝。

2.     Hosts文件修改

节点之间的通信有时候会用到IP地址,有时候会用到计算机名,所以需要给出节点IP地址跟计算机名的对应,linux系统中这种对应关系体现在/etc/hosts文件中,编辑hosts文件,按“IP   计算机名”的形式把各个节点写进hosts文件。

其中::1这一行是跟IPv6相关的,不需要去理会。其中127.0.0.1这一行是要注释掉的,不然之后运行hadoop的时候会出现“Bad connection to DFS”的错误,DFS是hadoop的文件系统。每次重启系统,hosts文件中都会自动自动加上一行127.0.0.1(原因不解),运行hadoop之前都要把这一行kill掉才行。

对于机器datanode1,hosts文件也要做类似处理。

3.     SSH无密码访问

Hadoop集群中节点都是通过ssh相互联系,进行数据传输,我们不可能为每次连接输入访问密码(常规ssh需要访问密码),所以我们需要进行相应配置,使节点之间的ssh连接不需要密码。 我们可以通过设置密钥来实现。

首先在namenode跟datanode上安装ssh(一般情况下已经默认安装了)。

然后在所有的节点(包括namenode跟datanode)上创建公钥私钥。

创建公钥私钥命令: ssh-keygen –t rsa

期间会要求输入一些信息,直接按回车就可以。这样,在默认的路径/home/hadoop/.ssh 目录下创建私钥 id_rsa 和一个公钥 id_rsa.pub 。

对于 datanode 节点:

将自己的公钥发送到 namenode 上:

#cp id_rsa.pub  datanode1_rsa.pub

#scp  datanode1_rsa.pub  172.18.218.34:/home/hadoop/.ssh

这里需要注意,由于每个 datanode 节点都要将自己的公钥传到 namenode 的相同路径下,因此,各个 datanode 发送的公钥文件名不能相同。这里使用 cp 命令,在每台 datanode 节点上将公钥文件复制为唯一名字的文件。

对于 namenode 节点:

在收到所有 datanode 发送过来的公钥文件之后,要综合这些文件(包括自身),并将这些文件发送到每个节点上:

#cp id_rsa.pub  authorized_keys

#cat datanode1_rsa.pub >>authorized_keys

把公钥authorized_keys拷贝到所有节点的.ssh文件夹下:

#scpauthorized_keys 172.18.218.44:/home/hadoop/.ssh 

这时一定要查看一下 ssh 配置是否成功,查看方式是使用 ssh 命令: ssh 其他机器 ip ,如果不需要密码就可以登录,就说明配置成功。如果还需要密码,干脆无法登录,则需要重启电脑。重启之后再次使用 ssh 命令,如果还需要密码或者无法登录,则需要重新配置一遍。

相关问答

更多
  • 1.关闭hdfs权限:hdfs-site.xml中 dfs.permissions false 2.检查eclipse插件是否设置了hadoop安装目录:将与linux下安装的hadoop相同版本的hadoop解压到windows下一个文件夹,然后指定hadoop插件目录,插件目录在preferences的map/reduce的hadoop installation location 3.在windows的hosts文件中添加hadoop所有节点的ip和主机名 4.关闭linux系统防火墙 5.把hadoo ...
  • 1、下载安装JDK,以及Eclipse 具体看此链接:http://blog.csdn.net/weixuehao/article/details/17715793 2、新建JAVA Project 3、去cloudera网站下载hadoop的CDH3u6版本。将起解压到win7的某个目录 4、选中OperateHDFS,右击,选择“property”,弹出右侧的窗口; 选择“Java Build Path” —— “Libraries” —— Add External Jars 5、到上面的画面后,下面就 ...
  • namenode节点配置 conf/core-site.xml: fs.default.name hdfs:// localhost:9000 hdfs测试环境配置 conf/hdfs-site.xml: 数据块不需要冗余 dfs.replication 1 job-tracker配置 conf/mapred-site.xml: mapred.job.tracker localhost:9001 免密码ssh登录配置 $ ssh localhost # 若不行, 则进行以下配置 $ ssh-keygen - ...
  • 你肯定可以把你的宿主机的ip固定下来 而且使用bridge 你的虚拟机也能设置成固定的ip
  • 单节点localhost. 否则就是各节点的hostname,另外要区分你用的是哪个版本的hadoop,最新版本不需要在配置文件里指定哪个是master,只需配置namenode的hostname即可
  • centOs6,redhat,Ubuntu都行,我个人感觉centOs比较好用,我自己也在用。
  • Phonegap 环境搭建[2023-04-02]

    使用PhoneGap搭建Android开发的项目整体步骤如下: 安装android的开发环境并配置环境变量。 安装Node.js环境并配置环境变量。 使用npm安装PhoneGap全局环境。 使用PhoneGap命令创建PhoneGap项目。 将PhoneGap编译为android项目。 将上述项目导入ADT进行后续开发。 具体步骤如下: 一、安装并配置android开发环境: 去下载最新版的ADT到本机,将其解压到相应的目录。 接下来需要配置环境变量,将如下两个路径配置到系统PATH中: A、{ADT_H ...
  • 我可以解决这个问题。 将文件从本地文件系统复制到HDFS目标文件系统时,它曾经是这样的:bin / hadoop dfs -put~ / nutch / urls urls。 但它应该是“bin / hadoop dfs -put~ / nutch / urls / * urls”,这里urls / *将允许子目录。 I could solve this issue. when copying files from local file system to HDFS destination filesyst ...
  • 如果在hadoop上运行nutch,则会生成与每个映射器和每个阶段的reducer相对应的日志。 它的位置是{HADOOP_LOG_DIR}/userlogs//syslog If you are running nutch on hadoop, the logs corresponding to each mapper and reducer of each phase is generated. The location of that is {HADOOP_LOG_DIR}/user ...
  • nutch的阶段是:Inject - > generate - > Fetch - > Parse - > Update - > Index 其中Fetch阶段是nutch发送url请求的地方(因此我将仅讨论此阶段并在答案中生成阶段。) 生成阶段会在crawldb中创建URL的获取列表。 在创建fetchlist时,属于同一主机的url通常属于同一分区,因为分区功能基于主机名。 因此,最终的获取列表将如下所示: fetch list 1 : all urls of host a1, b1, c1 fetch ...