标签:
目前关于Hadoop的安装配置教程书上、官方教程、博客都有很多,但由于对Linux环境的不熟悉以及各种教程或多或少有这样那样的坑,很容易导致折腾许久都安装不成功(本人就是受害人之一)。经过几天不断尝试,终于成功了。现将整个关于Hadoop的安装配置步骤分享出来,一方面为了希望能对有需要的朋友有所帮助,一方面为了总结所遇到的问题和解决方案。接下来开始正文。
提前下载好以下工具:
本人用的JDK版本是1.7.0_67,Hadoop使用的是2.6.0版。Eclipse是官网上最新的jee版。以上都准备好后,开始安装。
很多教程都有要求创建新用户,个人觉得并不是必须的,所以并没有创建新的用户。Hadoop的分布式模式和单节点模式都需要用到SSH登录,而Ubuntu已经默认安装了SSH client,所以只要再安装一下SSH server即可。打开终端(ctrl+alt+t)输入命令:
sudo apt-get install openssh-server
然后回车即可。
注意
如果不成功,提示以下之类的错误:
E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
可以尝试依次输入以下两个命令强制解锁:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
解锁后,再次输入安装SSH server命令安装SSH server。
安装完成后,可以使用下面的命令登录本机:
ssh localhost
根据提示输入用户密码,即可登录本机。
虽然上面的方法可以登录本机,但显然很麻烦,每次都需要输入密码,因此我们设置成SSH无密码登录。
首先退出上面的SSH,然后利用ssh-keygen生成密钥,并将密钥加入到授权中:
exit
cd ~/.ssh/
ssh-keygen -t rsa
cat id_rsa.pub >> authorized_keys
注意:如果cd ~/.ssh/ 后提示没有该目录,请先登录一次本机,再执行上面的命令。ssh-keygen -t rsa 命令后会有多个提示,全部只要按回车即可。
此时再用ssh localhost命令,就不需要密码即可直接登录本机了。
首先进入到jdk tar.gz所在的文件目录,我的是在Downloads目录下,所以命令是
cd ~/Downloads
然后将tar.gz文件解压到安装目录,我的jdk压缩包名是jdk-7u67-linux-x64.tar.gz,而且我希望它安装在/usr/local目录下,所以命令是
sudo tar zxvf jdk-7u67-linux-x64.tar.gz -C /usr/local
然后进入到/usr/local目录下
cd /usr/local
再输入
ls
即可看到里面包含一个叫jdk1.7.0_67类似的文件(文件名与所安装的JDK版本有关)
解压完毕后,就是配置环境变量了。关于环境变量的配置多种方法,我采用的是在 /.bashrc文件中配置。
利用命令:
sudo gedit ~/.bashrc
在打开的文件的末尾添加以下信息:
export JAVA_HOME=/usr/local/jdk1.7.0_67 //这里添加的是jdk所在的安装目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
我的添加如下:
保存后关闭,进入终端,source一下。
source ~/.bashrc
接下来设置默认的JDK
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_67/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0_67/bin/javac 300
设置完成后,输入java -version查看jdk信息。
查看到如上信息,说明jdk安装成功。
Hadoop的安装是递进的,即首先安装单机模式,然后在单机模式的基础上,配置伪分布式模式和分布式模式。
将Hadoop tar.gz文件解压到目的安装目录,我的想安装在/usr/local 文件目录下。所以命令是
sudo tar zxvf hadoop-2.6.0.tar.gz -C /usr/local
当然在解压之前,要先进入到Hadoop tar.gz文件所在的目录。
解压完毕后,进入到/usr/local目录
cd /usr/local
将文件夹hadoop2.6.0的名字修改为haoop
sudo mv hadoop2.6.0 hadoop
接着最好修改一下hadoop文件夹的权限,将文件夹的权限修改为想使用hadoop的用户,我的是lxy:
su root
chown -R lxy ./hadoop
如果是第一次使用root用户,请先设置root的登录密码:
sudo passwd root
输入两次密码后,再次su root,提示输入root密码。
至此,单机模式Hadoop安装完毕。为了验证安装是否成功,我们可以通过以下命令运行hadoop的自带例子:
cd /usr/local/hadoop
sudo mkdir input
sudo cp ./etc/hadoop/*.xml input
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output ‘dfs[a-z.]+‘
cat ./output/*
执行成功后会有如下提示,输出结果是符合正则的单词dfsadmin出现了1次。
由于Hadoop默认不会覆盖结果文件,所以当再次运行以上实例时,会出错,需要将output删除。
sudo rm -R ./output
如果运行时提示Java之类的错误,则需要配置下hadoop-env.sh文件,配置方法在接下来的内容中。
为了能够随时使用Hadoop命令,配置一下Hadoop的环境变量。方法与JDK一样,有三种方式。这里为了保持一致,在~/.bashrc中配置。
打开~/.bashrc
sudo gedit ~/.bashrc
在文件末尾添加:
#set hadoop environment
export HADOOP_INSTALL=/usr/local/hadoop #hadoop的安装目录
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
保存后关闭。
使用 source ~/.bashrc 使配置生效。
Hadoop伪分布式模式仅仅需要比单机模式多了修改三个配置文件而已。
进入到以下文件目录
cd /usr/local/hadoop/etc/hadoop
首先修改hadoop-env.sh文件
sudo gedit hadoop-env.sh
在打开的文件中找到JAVA_HOME的位置,将等号右边的部分修改为jdk的安装目录(也可以是用“#”将这段注释掉,重新写)
保存后关闭。
接着配置文件core-site.xml,把其中的
<configuration>
</configuration>
修改为
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
保存后关闭。
最后同样的方式,修改hdfs-site.xml文件
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
保存后关闭。
虽然官方教程中说只需要配置 fs.defaultFS 和 dfs.replication 就可以运行,不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,但该目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。因此我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,首先执行一次namenode的格式化
hdfs namenode -format
成功后,会看到successfully formatted的提示,并且可以看到 Exitting with status 0。
然后开始启动NameNode和DataNode
start-dfs.sh
如果出现提示Are you sure you want to continue connecting (yes/no)? 输入yes即可。
注意
这一步启动hadoop或者前面几步有提示:Error: JAVA_HOME is not set and could not be found. 请再次确认前面的/usr/local/hadoop/etc/hadoop/hadoop-env.sh有修改JAVA_HOME。
启动完成后,可以通过命令jps来判断是否成功,如果成功启动,则会出现以下进程
注意
如果执行jps后提示:“程序"jps"已经包含在下列软件包中.....”之类的提示,英文版系统,则是英文提示,执行以下命令即可
sudo update-alternatives --install /usr/bin/jps jps /usr/local/jdk1.7.0_79/bin/jps 1
如果之前没有配置系统默认JDK,请再次输入以下命令,有配置则忽略。
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_67/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0_67/bin/javac 300
如果SecondaryNameNode没有启动,请运行stop-dfs.sh 关闭进程,然后再次尝试启动尝试;如果 NameNode 或 DataNode 没有启动,请仔细检查之前步骤。
成功启动后,可以访问 Web 界面 http://localhost:50070 来查看 Hadoop 的信息。
首先创建一个hdfs 用户目录
hdfs dfs -p /user/lxy
接着在该目录下创建一个input文件
hdfs dfs -mkdir input
接着将 etc/hadoop 中的文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/lxy/input 中。上一步已创建了用户目录 /user/lxy,因此命令中就可以使用相对目录如 input,其对应的绝对路径就是 /user/hadoop/input。
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
复制完成后,可以通过以下命令查看文件列表
hdfs dfs -ls input
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹删掉以及运行结果来验证这一点)。
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output ‘dfs[a-z.]+‘
查看运行结果命令
hdfs dfs cat output/*
这里的output是在hdfs目录上的,其绝对路径是/user/lxy/output。
结果如下,因为配置修改了,所以结果和单机模式结果不同。
Hadoop程序运行过程中,默认目录不能存在,因此再次删除output文件夹
hdfs dfs -rm -r /user/lxy/output
注意
在创建目录时,请将"lxy"替换成自己使用hadoop的用户名。虽然不替换也可以,但却无法使用相对路径(我也不知道原因)。比如说我的用户名是lxy,但想创建/user/hadoop目录。然后执行后面的命令
hdfs dfs -p /user/hadoop
hdfs dfs -mkdir input
则会出现如下"No such file or dictionary"的错误提示。
此时必须使用绝对路径,才能成功。也就是说将input全部改成/user/hadoop/input才可以。
如果要关闭Hadoop,则运行stop-all.sh命令或者stop-dfs.sh命令即可。
注意
下次再次启动Hadoop(使用start-all.sh或者start-dfs.sh命令)时,不需要进行namenode的初始化了。
至此,Hadoop的伪分布式配置和使用,您已经掌握了。
将Eclipse的tar.gz文件解压到usr/local目录下
sudo tar zxvf ~/Downloads/eclipse-jee-mars-1-linux-x86_64.tar.gz -C /usr/local
进入usr/local目录可以看到一个eclipse文件夹
cd /usr/local
ls
可以使用下面的命令启动eclipse
/usr/local/eclipse/eclispe
虽然上面命令可以运行eclipse,但还是麻烦了些,所以我们可以创建桌面快捷方式
sudo su
sudo gedit /usr/share/applications/eclipse.desktop
在打开的文件写入以下内容
[Desktop Entry]
Name=eclipse
Comment=eclipse SDK
Encoding=UTF-8
Exec=/usr/local/eclipse/eclipse
Icon=/usr/local/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=Application;Development;
保存关闭后,利用图形工具进入到/usr/share/applications/下可以看到eclipse图标
然后将该图标复制到桌面即可。
Hadoop官网并未给出eclipse的Hadoop插件。但我们可以在网络上搜索到相应版本的插件,也可以自己编译hadoop源码后,制作插件。我就偷了下懒,直接从网上下载了。
将插件hadoop-eclipse-plugin-2.6.0.jar文件复制到/usr/local/eclipse/plugins目录下。然后重新启动eclipse。
打开eclipse的Windows->Perferences的Hadoop Map/Reduce中选择hadoop目录
打开windows->Open Perspective下的Map/Reduce,在此Perspective下进行hadoop开发。
打开Windows->Show View中的Map/Reduce Locations。
在此view下右键选择New Hadoop Location,新建Hadoop连接。
上图的Location name可以自定,"9001"端口可以任意。"9000"端口对应core-site.xml中的端口。确认完成后,eclipse会连接Hadoop。如果连接成功,会在Projetct Explorer下会展现HDFS中的文件。
注意
如果提示"Error:Call From ...."的错误,说明Hadoop未开启。开启Hadoop后,然后重启eclipse后,就能出现类似上图的情况了。
至此,插件配置完毕,可以开始Hadoop旅程了。
由于本人之前并没有接触过Linux,所以整个安装过程中,出现这样或那样的问题,期间走了不少弯路。为了避免其他像我一样的朋友,能够少走弯路,所以我写了这篇文章,将hadoop安装过程以及我遇到的一些问题及解决方法分享给大家。
Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
在Ubuntu 14.04 LTS上安装部署Hadoop 2.7.1(伪分布式)
标签:
原文地址:http://www.cnblogs.com/xiuyangleiasp/p/5010311.html