今天收到了在网上买的两本书,一本是《Hadoop权威指南》,还有一本是《Hadoop实战》。最近也打算开始学习大数据方面的知识,因为数据在当今的信息社会就是价值的体现。各个大公司都理解数据对自己的作用。看了看书对Hadoop的介绍,其实它就是用Java编写的一个分布式框架,里面的核心是HDFS和MapReduce。HDFS用于数据的分布式存储,MapReduce则用于数据的分析,Hadoop项目还有其他很多个项目,但它们两是核心。后面学了在说。
先来说一下安装,我的电脑装了双系统。今晚我现在Windows下安装。
1.Windows下安装Hadoop:
今晚可是花了一晚上才安装成了ssh。下面说一下安装步骤。主要是看书本《Hadoop实战》和配合网上的教程。
1> 安装JDK1.6或以上版本,这个我很早就装了。
2>下载安装Cygwin,它是一个在Windows下模拟UNIX环境的一个工具。只有通过它才能在Windows下安装Hadoop。(看来Hadoop还是基本面向UNIX的)
下载地址 http://www.cygwin.com/。安装的时候进入Net,要选中OpenSSL和OpenSSH,打算在Eclipse上编译Hadoop的,还必须安装Base Category下的sed。
将Cygwin的命令加入到电脑的环境变量里面。
3> 安装并开启sshd服务。
这里有几个注意的地方,启动Cygwin时要以管理员身份运行。它就是一个模仿Linux的shell界面,里面可以运行一下Linux下的命令。
输入ssh-host-config。这就是在配置ssh,书上说遇到yes/no时选择no,进过我的实践,选择yes最好。一开始ssh总是安装错误,然后就重新安装。最后安装ssh成功。
安装失败可以参考下面:cygrunsrv -R sshd是删除sshd,-S是启动sshd。
$ mkpasswd -l > /etc/passwd
$ mkgroup -l > /etc/group
$ cygrunsrv -R sshd
$ ssh-host-config
$ cygrunsrv -S sshd
我安装成功sshd之后,却发现启动不了sshd服务。启动命令:cygrunsrv -S sshd 或者 net start sshd。错误:发生系统错误 1069。由于登录失败而无法启动服务。
我在网上搜了有的说是密码错误,在 services.msc 里的登录标签里更改用户设置即可!但时我发现没用啊。。密码更本改不了,还是1069错误,于是我继续搜,看到一篇帖子说是关于权限的问题。给一个链接http://pwcrab.blog.163.com/blog/static/16990382220107267443810/,它里面说的很清楚,不过我用chown SYSTEM.None empty改了之后还是没用,还真让人郁闷。最后我在重新安装一遍,当遇到 ** Query: Do you want to use a different name? (yes/no)时 ,我选择了yes,重新用一个用户名,最后居然能成功开启sshd服务。应该是我之前安装的用户名默认权限不行导致登陆错误,我在“服务”下看到的变为了本地账号,不用在输入密码了。如图
4>配置SSH免密码登录
在Cygwin中输入 ssh-keygen -t dsa -P ' ' -f ~/.ssh/id_dsa,这是生成SSL的密钥。然后再cd ~/.ssh/ 和cp id_rsa.pub authorized_keys。最后一句试讲之前生成密钥的公钥发布出去。
虽然在windows下安装Hadoop还没有完成,鉴于会出现各种各样没有价值的错误,对于初学者不利,我还是暂时放弃在windows下的安装。下面就从Linux下安装来说明。
2.Linux下安装Hadoop:
我的电脑安装的是Ubuntu14。hadoop下载的是hadoop1.2.1.tar.gz。因为这个版本比较稳定,且书中的版本也是以hadoop1.x为主。
1>安装JAVA,Ubuntu下自带了java1.7的安装包,为Openjdk7,因为很多类下面没有,我们还算要去官网上重新下载案子java。我没有直接卸载自带的java,而是将新下载的java1.7安装在/usr/local中。同时设定环境变量。如:
export JAVA_HOME=/usr/local/java/jdk1.7.0_45
export JRE_HOME=/usr/local/java/jdk1.7.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin: $PATH
2>创建hadoop用户,不能直接用图形界面创建用户,否则会失败。
用 sudo adduser hadoop。我的用户名和组名都为hadoop。不能用useradd创建。且创建用户时必须输入新密码。然后可以在图形界面下更改hadoop的权限,变为管理员。也可以用命令变更。
3>安装ssh服务
默认ssh是关闭的。
sudo apt-get install ssh 进行安装
之后是ssh无密码验证登陆。一般都没什么问题。
创建ssh-key,这里我们采用rsa加密算法,命令行如下:
ssh-keygen -t rsa -P ""
出现一个图形,出现的图形就是密码,不用管它
cat ~/.ssh/id_rsa.pub >> authorized_keys
然后即可无密码验证登录了,如下:
ssh localhost
4> 安装hadoop。
切换到新建的hadoop用户下。下面将下载的hadoop1.2.1.tar.gz复制到/home/hadoop文件夹下。用解压命令
tar -xzvf *.tag.gz 进行解压。
之后就是对hadoop进行文件的配置,对应书上内容就行。配置hadoop1.2.1/conf/下的hadoop-env.sh,core-site.xml,mapred-site.xml,hdfs-site.xml四个文件。
启动hadoop:
格式化文件系统 bin/hadoop namenode -format
启动所以进程 bin/start-all.sh。
验证是否成功:输入jps,下面会有五个java进程。(如果没有,看java环境变量是否对的,或关闭hadoop:bin/stop-all.sh,重新格式化)
打开浏览器输入 http://localhost:50030(MapReduce页面)http://localhost:50070(HDFS页面),如都能查看说明成功。
Linux下的安装比Windows下其实要简单,因为不会出现乱七八糟的问题,中间可能出现文件权限的问题,修改权限就行了。
------------------------------------------------------新增错误处理--------------------------------------------------------------------
*今天我想运行一下最基本的wordcount时,出错了。启动ssh,启动hadoop,利用jps命令查看进程,发现namenode没有启动,登陆localhost:50070也登陆不了。
namenode启动不了,运行hadoop就会出错,说链接不了9000端口,后来百度之发现namenode没启动是由于 Ubunut下的/tmp文件里的内容每次关机都会清空,namenode的格式化信息就会丢失,要开启namenode就要重新对hadoop进行格式化。通过重新配置core-site.xml可以修改。
1.在hadoop新建hadoop_tmp目录
2.用sudo gedit conf/core-site.xml 修改配置文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-1.2.1/hadoop_tmp</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
参考:《Hadoop实战》和一篇博文:http://www.cnblogs.com/zhengyuhong/archive/2013/10/25/3388474.html