在Linux 上安装Hadoop 教程.pdf
在在 Linux 上安装上安装 Hadoop 教程教程 在虚拟机中安装的 Ubuntu系统下搭建 Hadoop 集群时首先要解决的问题是将宿主机的文件拷贝到虚拟机上。采用的简单方法是宿主机使用 Serv-U 建立一个 FTP 然后在虚拟机上登录将文件拷出来。要先熟悉 Linux 的基本概念和操作,如:cd、ls、tar、cat、ssh、scp、cp、rm、sudo、su、apt-get等操作。一一.实践环境实践环境:Ubuntu10.04+jdk1.6+hadoop-0.20.1 机器名 IP 作用 Master 192.168.0.3 Namenode、master、jobtracker Slave1 192.168.0.4 Datanode、slave、tasktracker Slave2 192.168.0.6 Datanode、slave、tasktracker 二二.安装步骤安装步骤:1.在虚拟机上安装 Ubuntu10.04。这个很简单可以上网参考基本上是一直“下一步”就行。注意两个地方:一个是出现选择存储空间时直接选择使用整个磁盘就行,不要进行手动分区。第二个就是我才用的上网方法是 NAT 技术。配置详情在 11.30 日的日志里。2.2.对三台虚拟机做一下更新。$sudo apt-get update。后面要安装软件时,如果没有更新,在安装所需软件时,可能会说找不到软件,安装不上。注意选择软件源时不要仅仅是一个网站,建议使用“中国 的服务器”。3 3.修改机器名和 hosts 文件。IP 为 192.168.128.2 的虚拟机做 namenode 机器名叫 master。IP 为 192.168.128.3 和 192.168.128.4 的虚拟机做 datanode 机器名分别叫 slave1,slave2 第一步:修改三台虚拟机的机器名。对 master$vi /etc/hostname /sudo hostname master 倒是有用啊 进入文件后将机器名改成 master 对 slave$vi /etc/hostname 进入文件后机器名改成 slave1$vi /etc/hostname 第二步:修改三台虚拟机的/etc/hosts 文件。对 master 和 slave vi /etc/hosts 进入文件后原内容删除加入如下内容。192.168.0.3 master master 192.168.0.4 slave1 slave1 192.168.0.6 slave2 slave2 4 4.在三台虚拟机上分别新建一个名字为 jsj 的用户。第一步:rootmaster:$adduser jsj 第二步:提示你要求你填写一些信息,可以直接回车。第三步:设置 jsj 这个用户的密码(尽量简单一致)。Sudo 第四步:rootmaster:/home$chown -R jsj:jsj jsj /将 jsj 文件夹的所用者改成 jsj 用户的。否则我们用 adduser jsj 创建了 jsj 用户后,jsj 用户不能在自己的主目录下创建文件夹,(如:$mkdir.ssh)提示没有权限创建文件夹。要添加新用户到 sudo,最简单的方式就是使用 usermod 命令。运行$sudo usermod-G admin username 这就你要作的,然而,如果用户已经是其他组的成员,你需要添加-a 这个选项,象这样$sudo usermod-a-G admin username 5 5.在三台虚拟机上分别配置 ssh 无密码登录。第一步:rootmaster:$sudo apt-get install ssh /开启 ssh 服务。第二步:jsjmaster:$mkdir.ssh 在三台虚拟机的/home/jsj 目录下都用 jsj 用户建立一个.ssh 目录 第三步:jsjmaster:/.ssh/$ssh-keygen t rsa P f/.ssh/id_dsa ssh-keygen-t rsa-P /这个命令将为 masters 上的 jsj 用户生成其密钥对,生成的密钥对 id_dsa,id_dsa.pub,默认存储在/home/jsj/.ssh 目录下。第四步:jsjmaster:/.ssh/$cat id_dsa.pub authorized_keys。cat/.ssh/id_rsa.pub /.ssh/authorized_keys/把 id_dsa.pub 追加到授权 key 里面(当前并没有 authorized_keys 文件是你也可以直接使用 cp 命令)。至此无密码登录到本机已经配置好了。可以使用$ssh localhost 命令测试一下。第一次登录时要输入 yes,之后就不用了。第五步:jsjmaster:/.ssh/$scp id_dsa.pub jsjslave1:/home/jsj/.ssh/将 id_dsa.pub 文件传送到 slave1 这台虚拟机上。slave2 同理。現在的 ssh 使用同樣的方法會出現錯誤訊息 Agent admitted failure to sign using the key 解決方式 使用 ssh-add 指令将私钥 加进来(根据个人的密匙命名不同更改 id_rsa)#ssh-add /.ssh/id_rsa /authorized_keys 第六步:到 slave1 这台虚拟机上执行第四步的操作。slave2 同理。至此 master 就可以无密码登录到 slave1 和 slave2 上了。如果想要 slave1 和 slave2 都可以无密码登录到master 上必须在 slave1 和 salve2 上也操作第三部生成自己的密钥对而且要将密钥对追加到三台机器的 authorized_keys 文件里。至此各个机器上的 SSH 配置已经完成,可以测试一下了,比如 master 向 slave1 发起 ssh连接 jsjmater:/.ssh$ssh slave1 如果 ssh 配置好了,就会出现以下提示信息 The authenticity of host dbrg-2 cant be established.Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.Are you sure you want to continue connecting(yes/no)?OpenSSH 告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“/.ssh/know_hosts”文件中。第二次访问这台主机的时候你会发现不需要输入密码就可以建立 ssh 连接了,恭喜你,配置成功了。不过,别忘了测试本机 ssh localhost (因为后面的 Hadoop 命令受到这一步的影。注意如果你没有成功记住删除“/.ssh/know_hosts”文件就可以重新开始。6 6.在三台虚拟机上分别安装 jdk1.6 第一步:将 jdk-6u13-linux-i586.bin 拷到/home/jsj 目录下 第二步:rootmaster:/home/jsj$chmod u+x jdk-6u13-linux-i586.bin/将 bin 文件修改成可执行文件。第三步:rootmaster:/home/jsj/$./jdk-6u13-linux-i586.bin/运行安装文件 第四步:rootmaster:/$gedit/etc/profile 在文件里面加入如下信息。export JAVA_HOME=/home/jsj/jdk1.6.0_13 export JRE_HOME=/home/jsj/jdk1.6.0_13/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 然后 rootmaster:/$source/etc/profile 是文件内容生效。第五步:重启电脑,在任何用户中$java version 如果显示如下信息:java version 1.6.0_13 Java(TM)SE Runtime Environment(build 1.6.0_04-b12)Java HotSpot(TM)Client VM(build 10.0-b19,mixed mode,sharing)说明 jdk 安装成功。你可以在 slave1 和 slave2 上执行同样的操作,也可以使用$scp r 将 jdk1.6.0_13 文件夹拷到其它两台虚拟机上,然后配置环境变量就 OK 了。至此 jdk 安装成功。注意安装 jdk 时容易出现的一个问题:第一是安装完成后只有安装时的登录用户可用 java 其它用户 可用。这样的话你要设置一下/etc/environment 文件。设置方法网上搜索就可以。7 7.在三台虚拟机上分别安装 Hadoop-0.20.1 第一步:将 hadoop-0.20.1.tar.gz 文件拷贝到/home/jsj 目录下。第二步:rootmaster:/home/jsj/$tar-xzvf hadoop-0.20.1.tar.gz/将文件解压。第三步:rootmaster:/home/jsj/$chown jsj:jsj hadoop-0.20.1/将文件所有者改成 jsj。第四步:rootmaster:/home/jsj/$gedit/etc/profile 进入文件将如下信息加到文件里。export HADOOP_HOME=/home/jsj/hadoop-0.20.1 export PATH=$HADOOP_HOME/bin:$PATH 第五步:更改 conf 目录下的 conf/core-site.xml,conf/hdfs-site.xml,conf/mapred-site.xml,conf/hadoop-env.sh,conf/masters,conf/slaves 文件。rootmaster:/home/jsj/hadoop-0.20.1/conf/$gedit hadoop-env.sh 进入文件加入如下信息。export JAVA_HOME=/home/jsj/jdk1.6.0_13 rootmaster:/home/jsj/hadoop-0.20.1/conf/$gedit masters 进入文件加入如下信息。192.168.128.2 rootmaster:/home/jsj/hadoop-0.20.1/conf/$gedit slaves 进入文件加入如下信息。192.168.128.3 192.168.128.4 rootmaster:/home/jsj/hadoop-0.20.1/conf/$gedit core-site.xml 进入文件加入如下信息。hadoop.tmp.dir /home/jsj/tmp A base for other temporary directories.fs.default.name hdfs:/192.168.128.2:9000 rootmaster:/home/jsj/hadoop-0.20.1/conf/$gedit hdfs-site.xml 进入文件加入如下信息。(replication 默认是 3,如果不修改,datanode 少于三台就会报错)。dfs.replication 1 rootmaster:/home/jsj/hadoop-0.20.1/conf/$gedit mapred-site.xml 进入文件加入如下信息。mapred.job.tracker 192.168.128.2:9001 第六步:jsjmaster:/$scp r hadoop-0.20.1 jsjslave1:/home/jsj/hadoop-0.20.1/将文件 hadoop-0.20.1 拷贝到其它两个虚拟机上就可以了。至此 hadoop 安装完成。注意一个问题:运行时出现找不到主函数的错误,说明 profile环境变量的设置没有起效。可以在/etc/environment 文件里加入一些信息。具体信息网上搜索。8 8.运行 hadoop 自带的例程 wordcount。第一步:jsjmaster:/hadoop-0.20.1/bin/$hadoop namenode format/格式化文件系统,新建一个文件系统。第二步:jsjmaster:/hadoop-0.20.1/$start-all.sh/启动 hadoop 的所有守护进程。第四步:jsjmaster:/hadoop-0.20.1/$jps /查看进程,master 虚拟机上的结果。在 slave1 和 slave2 虚拟机上 jsjslave1:/hadoop-0.20.1/$jps 第四步:(1)先在本地磁盘建立两个输入文件 file01 和 file02:第五步:jsjmaster:/soft/$echo“Hello World Bye World”file01 jsjmaster:/soft/$echo“Hello Hadoop Goodbye Hadoop”file02/在本地磁盘建立两个输入文件 file01 和 file02。将 Hello World Bye World 语句和Hello Hadoop Goodbye Hadoop 语句分别加到 file01 文件和 file02 文件里面。第六步:jsjmaster:/hadoop-0.20.1/$hadoop fs mkdir input/在 hdfs 中建立一个 input 目录 第七步:jsjmaster:/hadoop-0.20.1/$hadoop fs copyFromLocal/home/jsj/soft/file0*input/将 file01 和 file02 拷贝到 hdfs 中。第八步:jsjmaster:/hadoop-0.20.1/$hadoop jar hadoop-0.20.1-examples.jar wordcount input output/执行 wordcount。第九步:jsjmaster:/hadoop-0.20.1/$hadoop fs-cat output/part-r-00000/完成之后,查看结果:Bye 1 Goodbye 1 Hadoop 2 Hello 2 World 2 在运行完一次例子程序后,需要进去删除到 input 和 output 要执行 Hadoop fs rmr/user/wy/input Hadoop fs rmr/user/wy/output 来清除掉上一次例子程序产生的运行目录。不仅如此还要把各个节点的 tmp 删除,log 删除 就可以了 每天机器上都要配置 hadoop_home path 防火墙问题 sudo ufw disable 磁盘问题 安全模式问题 hadoop dfsadmin-safemode leave 至此 hadoop 运行环境已经全部搭建完成。如果要按照此方法搭建请注意每次运行命令的用户和路径。这次搭建过程中还存留的一个问题就是/etc/profile 和/etc/environment 文件的区别。Ubuntu 文本编辑文本编辑(vi 和和 nano)命令命令 1、用 vi 命令修改:vi 是 Unix 世界里极为普遍的全萤幕文书编辑器,几乎可以说任何一台 Unix 机器都会提供这套软体就像 windows 的记事本一样。键入 vi/etc/hosts 进入 vi 界面,把光标移动到文件未尾。按 ESC 键进行命令模式(不放心可以多按几下),然后输入 A,新起一行 输入你要配置的 host,如:192.168.0.192 。完成后 按 ESC 键进行命令模式,输入:wq(注意需要输入:)保存退出。2、用 nano 命令修改:nano 是一个小巧自由,并且友好的编辑器,在大部分 linux 上都有 nano 命令。相对 vi,不熟悉 linux 的我感觉 nano 要简单许多:打开后直接编辑,命令如下:sudo nano/etc/hosts 完成后按 ctrl+x 退出,按 y 保存,回车,OK Tools 打开 Ubuntu 里的终端。输入命令 cd vmware-tools-distrib/sudo./vmware-install.pl 本人在安装 vmware tools 时发现了诸多问题,但最终还是顺利解决,针对网上比较普遍的方法,本人在此弄一个更为简便的操作指引,希望能给新手一点帮助。第一步:进入系统后,点击虚拟机上的安装 vmware tools,回到桌面回看到一个 vmware tools 的 cdrom图标。第二步:打开它,复制“vmwaretools.tar.gz”,打开文件系统,打开 home 文件夹,打开当前用户为名的 文 件 夹,粘 贴vmwaretools.tar.gz,同 时 解 压 此 文 件“到 此 处”。第三步:在此文件夹空白处点击右键,点击属性,在点击窗口中的“权限”,把里面所有“文件夹访问”的内容改为“创建和删除文件”便可。第四步:回到刚才目录,单击 vmware-tools-distrib 文件夹,然后打开终端(应用程序-附件-终端)。第五步:在命令行输入“ls”后将列出文件夹文件;接着输入“cd vmware-tools-distrib”指定到此文件夹,接着输入“ls”列出此文件夹内容,接着输入“sudo./vmware-install.pl”,输入用户密码便可开始安装了。第六 步:接 下 来N多 的enter,N多 的YES,自 己慢慢 按 吧。第七步:直到你看到-the vmware team 就可关闭窗口,然后重新启动就可以焕然一新 虚拟机采用 NAT 上网问题 VMware 我重新装了一遍,然后把 win7 防火墙打开,再将本地连接共享,同时 VNET8 采用使用获取 IP 最后再 VMware 里 restart VNET8,ok,搞定哇 设置 root 密码:sudo passwd 切换回来 su 用户名 2.远远程程拷拷贝贝命命令令:1)拷拷贝贝本本地地文文件件到到远远端端:scp 本地文件名 远端用户名远端 IP 地址:远端绝对路径,包含文件名 示例:把本端当前目录下的 a.tgz 文件拷贝到远端(192.168.1.41)目录/etc/my 下,并命名为b.tgz,如下写 scp a.tgz root192.168.1.41:/etc/my/b.tgz 2)拷拷贝贝远远端端文文件件到到本本地地:scp 远端用户名远端 IP 地址:远端绝对路径,包含文件名 本地文件名 示例:把远端(192.168.1.41)/etc/my 目录下的 a.tgz 文件拷贝到本地当前目录下,并命名为b.tgz,如下写 scp root192.168.1.41:/etc/my/a.tgz b.tgz 3)拷拷贝贝本本地地文文件件夹夹到到远远端端:scp-r 本地目录 远端用户名远端 IP 地址:远端目录的绝对路径 4)拷拷贝贝远远端端文文件件夹夹到到本本地地:scp-r 远端用户名远端 IP 地址:远端目录的绝对路径 本地目录 HDFS 和 HBase:文件系统和文件系统中的数据库 http:/ 配置好的 hadoop-0.21.0 不兼容目前的 hbase-0.20.6(最新版)我日,重新配置 先用 hadoop-0.20.2 搭配 hbase-0.20.6 會比較妥當 hbase 集群安装集群安装 并且已经安装成功 Hadoop-0.20.2 及以上版本。安装包准备 需要安装包:zookeeper-3.3.2.tar.gz(stable 版本)hbase-0.20.2.tar.gz(stable 版本)安装步骤 安装和配置 ZooKeeper HBase 从 0.20.0 开始,需要首先安装 ZooKeeper。从 apache 上下载 zookeeper-3.2.1.tar.gz(Stable 版本),解压到/home/hdfs/目录下。(1)在 namenode 节点新建 zookeeper 目录,在该目录下新建 myid 文件。(2)在 zookeeper-3.2.1/conf 目录下,拷贝 zoo_sample.cfg 为 zoo.cfg。在 zoo.cfg 中将 dataDir 改为/home/hdfs/zookeeper,在文件末位添加所有的主机:server.1=10.192.1.1:2888:3888 server.2=10.192.1.2:2888:3888 server.3=10.192.1.3:2888:3888 (3)用 scp 命令将 namenode 节点的的/home/hdfs/zookeeper-3.2.1 和/home/hdfs/zookeeper 拷贝到其余所有主机的/home/hdfs 目录下。(4)参照 zoo.cfg 中的配置,在各主机 myid 文件中写入各自的编号。如:10.192.1.1 入 1,10.192.1.2 写入 2(5)在所有节点上执行 bin/zkServer.sh start,分别启动。执行 bin/zkCli.sh-server xxx.xxx.xxx.xxx:2181,检查指定服务器是否成功启动。vi/etc/profile export HBASE_HOME=/hadoop/hbase export PATH=$PATH:$HBASE_HOME/bin export HADOOP_HOME=/hadoop/hadoop export PATH=$PATH:$HADOOP_HOME/bin 安装和配置 HBase tar-zxvf hbase-0.20.6.tar.gz cd hbase-0.20.6 mv*/hadoop/hbase 下载 HBase0.20.1 版本,解压到 namenode 节点的/home/hdfs 目录下。配置说明(1)系统所有配置项的默认设置在 hbase-default.xml 中查看,如果需要修改配置项的值,在 hbase-site.xml 中添加配置项。在分布式模式下安装 HBase,需要添加的最基本的配置项如下:hbase.rootdir hdfs:/hadoop2-namenode:9000/hbase The directory shared by region servers.hbase.cluster.distributed true The mode the cluster will be in.Possible values are false:standalone and pseudo-distributed setups with managed Zookeeper true:fully-distributed with unmanaged Zookeeper Quorum(see hbase-env.sh)hbase.zookeeper.property.dataDir /hadoop/zookeeper Property from ZooKeepers config zoo.cfg.The directory where the snapshot is stored.hbase.zookeeper.property.clientPort 2222 Property from ZooKeepers config zoo.cfg.The port at which the clients will connect.hbase.zookeeper.quorum hadoop2-namenode,hadoop2-datanode1,hadoop2-datanode2 Comma separated list of servers in the ZooKeeper Quorum.For example,.By default this is set to localhost for local and pseudo-distributed modes of operation.For a fully-distributed setup,this should be set to a full list of ZooKeeper quorum servers.If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of servers which we will start/stop ZooKeeper on.(2)在conf/hbase-env.sh中修改添加配置项:export JAVA_HOME=/usr/java/jdk1.6.0_22 export HBASE_MANAGES_ZK=true export HADOOP_CONF_DIR=/hadoop/hadoop-config HADOOP_CLASSPATH 要設 hbase 的環境,而 HBASE_CLASSPATH 要設 hadoop 的環境,有了這行可以解決編譯 hbase 程式時出現 run time error 并把/hadoop-0.20.1/conf/hdfs-site.xml 拷贝至/hbase-3.2.1/conf/目录下。(3)将 ZooKeeper 的配置文件 zoo.cfg 添加到 HBase 所有主机的 CLASSPATH 中。(4)在conf/regionservers中 添 加hadoop-0.20.1/conf/slaves中 所 有 的datanode节 点。hadoop2-datanode1 hadoop2-datanode2 启动 Hadoop、ZooKeeper 和 HBase 之间应该按照顺序启动和关闭:启动 Hadoop启动 ZooKeeper 集群启动 HBase停止 HBase停止 ZooKeeper 集 群停止 Hadoop。在 namenode 节点执行 bin/hbase-daemon.sh,启动 master。执行 bin/start-hbase.sh 和 bin/stop-hbase.sh 脚本启动和停止 HBase 服务。/hadoop/hbase/bin/hbase-daemon.sh start master/hadoop/hbase/bin/hbase-daemon.sh stop master/hadoop/hbase/bin/start-hbase.sh/hadoop/hbase/bin/stop-hbase.sh /hadoop/hbase/bin/hbase shell Gedit /etc/profile Hbase 时 每次都要 source/etc/profile 怪了怪了 重启 VM 无效 重启电脑再开启 VM 有效了。晕 在 HBase 运行 java 可以先在 windows 系统上写好并且编译好 java.class 文件然后再拖到ubuntu 直接 hbase XXX 这个就是利用了 java 跨平台的好处,很方便,特别是用虚拟机的时候。Watcher 找不到,就在 hadoop-env.sh 中加入 CLASSPATH 注意:zookeeper 用的什么 就加相应的 zookeeper-3.3.3.jar 名字千万不要写错啊。我损失半天的时间了。http:/ /返回的是比特,先转换为字符串再转换为 int int temp=Integer.parseInt(Bytes.toString(value.getValue();context.write(new Text(Bytes.toString(value.getKey(),new IntWritable(temp);