红联Linux门户
Linux帮助

Linux中单机配置Hadoop

发布时间:2015-04-20 11:29:42来源:linux网站作者:iam333

一、安装JAVA。

首先安装java。因为Ubuntu里面默认安装了OpenJDK,可以先将其卸载。在终端输入命令:sudo apt-get purge openjdk*。

1、从sun主页下载JDK for linux 版本。我下载的是jdk-6u37-linux-i586.bin。下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.html

2、切换到root用户并切换到想要安装的目录。我的安装目录为/usr/lib/jvm/java。将下载的文件拷贝到此目录中。并使用命令:chmod a+x jdk-6u37-linux-i586.bin将此文件权限设置为可执行类型。

3、开始安装。在终端输入:./jdk-6u37-linux-i586.bin,接下来会进行安装过程。安装过程中会提示按Enter键继续。

4、安装完成后,会出现Done。表示完成了java环境的安装。安装的位置为当前目录/usr/java。当然,也可以选择其他的位置。

5、安装完成后,直接在终端输入java会出错。此时还需要配置环境变量。如果只使用export命令则支队当前shell起作用。如果切换shell或重启则依旧会失效。可以选择配置.bashr文件或/etc/profile,后者修改系统配置文件,对所有用户均有效。

6、使用vim打开/etc/profile文件。在末尾添加如下内容:

export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_37
export JRE_HOME=/usr/lib/jvm/java/jdk1.6.0_37/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

(注:注意一定不要错误,否则有可能重启后无法进入系统,如果由于输入错误,导致开机之后只有空白的界面,按ctrl+Alt+F1进入tty1命令行界面,输入命令:sudo vim /etc/profile 检查刚刚的配置是否有错误的地方,改正后重启即可。注意export命令=两边没有空格。)

7、保存后重新启动计算机。

(注:网上有资料说可以使用source更新一下。在终端输入命令:source /etc/profile。经本人测试,这种方法会导致只在一个终端中有效,如果打开新的终端会java配置会失效,除非再次使用source命令更新。)

8、使用env命令查看各环境变量的值。如果各项变量内容都与之前配置的相同,则说明配置成功。也可使用java -version命令察看。如果能输出java version "1.6.0_37"则表明配置正确。


二、创建Hadoop组和Hadoop用户。

1、创建hadoop用户组:sudo addgroup hadoop

2、创建hadoop用户:sudo adduser -ingroup hadoop hadoopusr。过程中会要求你输入密码和用户信息。输入用户信息的时候,可直接点Enter(表示默认)。最后输入y。

3、给刚新建的hadoop用户hadoopusr添加权限,打开/etc/sudoers文件。输入命令:sudo gedit /etc/sudoers。给hadoopusr赋予root用户同样的权限。在文件末尾添加如下信息:

root ALL=(ALL:ALL) ALL
hadoopusr ALL=(ALL:ALL) ALL


三、安装ssh服务

ssh可以实现远程登录和管理,具体可以参考其他相关资料。

输入命令:sudo apt-get install ssh openssh-server,安装openssh-server。

如果你已经安装好了ssh,可以直接进行下一步。


四、建立ssh无密码登录本机

首先要转换成hadoop用户,执行以下命令:su - hadoopusr,再输入密码即可。

ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。

1、创建ssh-key,我们采用rsa方式。输入命令:ssh-keygen -t rsa -P ""

输入命令后会出现提示信息:“Enter file in which to save the key (/home/hadoopusr/.ssh/id_rsa):”,直接点回车即可。出现如下信息:

Created directory '/home/hadoopusr/.ssh'.
Your identification has been saved in /home/hadoopusr/.ssh/id_rsa.
Your public key has been saved in /home/hadoopusr/.ssh/id_rsa.pub.
The key fingerprint is:
d4:29:00:6e:20:f0:d9:c6:a2:9b:cd:22:60:44:af:eb hadoopusr@shan-pc
The key's randomart image is:
+--[ RSA 2048]----+
|+.. ... |
|.o.* . . . |
| .+.* o o |
|...+ . . |
|oo S |
|o=. |
|=.o |
|o. |
| E |
+-----------------+

(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub。这两个文件是成对出现的。)

2、进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始没有authorized_keys文件。执行命令:

cd ~/.ssh
cat id_rsa.pub >> authorized_keys

完成后即可无密码登录本机。

3、登录localhost。在终端输入命令:ssh localhost

(注:当ssh远程登录到其它机器后,你控制的是远程的机器,需要执行退出命令才能重新控制本地主机。)

4、执行退出命令。输入命令:exit


五、安装Hadoop。

在Hadoop官网下载Hadoop。本次使用的版本为1.1.0。在官网下载hadoop-1.1.0.tar.gz。(注:使用非root用户)下载地址:http://www.apache.org/dyn/closer.cgi/hadoop/common/

1、假设hadoop-1.1.0.tar.gz在桌面,将它复制到安装目录 /usr/local/下。执行命令:sudo cp hadoop-0.20.203.0rc1.tar.gz /usr/local/

2、解压hadoop-1.1.0.tar.gz。执行命令:

cd /usr/local
sudo tar -zxf hadoop-1.1.0.tar.gz

3、将解压出的文件夹改名为hadoop。执行命令:sudo mv hadoop-1.1.0 hadoop

4、将该hadoop文件夹的属主用户设为hadoopusr。执行命令:sudo chown -R hadoopusr:hadoop hadoop

5、打开hadoop/conf/hadoop-env.sh文件。执行命令:sudo gedit hadoop/conf/hadoop-env.sh

6、配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本机jdk的路径):export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_37

7、打开conf/core-site.xml文件。输入命令sudo gedit hadoop/conf/core-site.xml,修改为:(注:如果直接复制此处代码,会有行号。请去掉行号。下同。)

<?xmlversion="1.0"?>
<?xml-stylesheettype="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>
</configuration>

8. 打开conf/mapred-site.xml文件。输入命令:sudo gedit hadoop/conf/mapred-site.xml,修改为:

<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>

9. 打开conf/hdfs-site.xml文件。输入命令:sudo gedit hadoop/conf/hdfs-site.xml,修改为:

<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl"href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/data1,/usr/local/hadoop/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

10. 打开conf/masters文件,添加作为secondarynamenode的主机名,作为单机版环境,这里只需填写 localhost 就Ok了。sudo gedit hadoop/conf/masters

11. 打开conf/slaves文件,添加作为slave的主机名,一行一个。作为单机版,这里也只需填写 localhost就Ok了。sudo gedit hadoop/conf/slaves


六、在单机上运行hadoop

1. 进入hadoop目录下,格式化hdfs文件系统,初次运行hadoop时一定要有该操作,

cd /usr/local/hadoop/

bin/hadoop namenode -format

2. 当你看到如下信息时,就说明你的hdfs文件系统格式化成功了。

******************省略信息**********************************/
12/11/19 14:13:14 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/usr/local/hadoop/datalog2/current/edits
12/11/19 14:13:14 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/usr/local/hadoop/datalog2/current/edits
12/11/19 14:13:14 INFO common.Storage: Storage directory /usr/local/hadoop/datalog2 has been successfully formatted.
12/11/19 14:13:14 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at shan-pc/127.0.1.1
************************************************************/

3、启动bin/start-all.sh。输入命令:bin/start-all.sh

4、检测hadoop是否启动成功。输入命令:jps

如果有Namenode,SecondaryNameNode,TaskTracker,DataNode,JobTracker五个进程,就说明你的hadoop单机版环境已经配置完成。

OK,一个hadoop的单机版环境已经搭建完成~接下来我们运行一个实例测试一下~


七、测试

1、进入hadoop目录下(cd /usr/local/hadoop),输入启动命令:bin/start-all.sh。启动hadoop。

2、输入如下命令执行wordcount程序计算过程:

echo "hello world" > /home/hadoopusr/file01
echo "hello hadoop" > /home/hadoopusr/file02
bin/hadoop fs -mkdir input
bin/hadoop fs -copyFromLocal /home/hadoopusr/file0* input
bin/hadoop jar hadoop-examples-1.1.0.jar wordcount input output

hadoopusr@shan-pc:/usr/local/hadoop$ echo "hello world" > /home/hadoopusr/file01
hadoopusr@shan-pc:/usr/local/hadoop$ echo "hello hadoop" > /home/hadoopusr/file02
hadoopusr@shan-pc:/usr/local/hadoop$ bin/hadoop fs -mkdir input
hadoopusr@shan-pc:/usr/local/hadoop$ bin/hadoop fs -copyFromLocal /home/hadoopusr/file0* input
hadoopusr@shan-pc:/usr/local/hadoop$ bin/hadoop jar hadoop-examples-1.1.0.jar wordcount input output
12/11/19 15:34:15 INFO input.FileInputFormat: Total input paths to process : 2
12/11/19 15:34:15 INFO util.NativeCodeLoader: Loaded the native-hadoop library
12/11/19 15:34:15 WARN snappy.LoadSnappy: Snappy native library not loaded
12/11/19 15:34:15 INFO mapred.JobClient: Running job: job_201211191500_0006
12/11/19 15:34:16 INFO mapred.JobClient: map 0% reduce 0%
12/11/19 15:34:21 INFO mapred.JobClient: map 100% reduce 0%
12/11/19 15:34:29 INFO mapred.JobClient: map 100% reduce 33%
12/11/19 15:34:30 INFO mapred.JobClient: map 100% reduce 100%
12/11/19 15:34:31 INFO mapred.JobClient: Job complete: job_201211191500_0006
12/11/19 15:34:31 INFO mapred.JobClient: Counters: 29
12/11/19 15:34:31 INFO mapred.JobClient: Job Counters
12/11/19 15:34:31 INFO mapred.JobClient: Launched reduce tasks=1
12/11/19 15:34:31 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=7520
12/11/19 15:34:31 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0
12/11/19 15:34:31 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0
12/11/19 15:34:31 INFO mapred.JobClient: Launched map tasks=2
12/11/19 15:34:31 INFO mapred.JobClient: Data-local map tasks=2
12/11/19 15:34:31 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=9406
12/11/19 15:34:31 INFO mapred.JobClient: File Output Format Counters
12/11/19 15:34:31 INFO mapred.JobClient: Bytes Written=25
12/11/19 15:34:31 INFO mapred.JobClient: FileSystemCounters
12/11/19 15:34:31 INFO mapred.JobClient: FILE_BYTES_READ=55
12/11/19 15:34:31 INFO mapred.JobClient: HDFS_BYTES_READ=253
12/11/19 15:34:31 INFO mapred.JobClient: FILE_BYTES_WRITTEN=71884
12/11/19 15:34:31 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=25
12/11/19 15:34:31 INFO mapred.JobClient: File Input Format Counters
12/11/19 15:34:31 INFO mapred.JobClient: Bytes Read=25
12/11/19 15:34:31 INFO mapred.JobClient: Map-Reduce Framework
12/11/19 15:34:31 INFO mapred.JobClient: Map output materialized bytes=61
12/11/19 15:34:31 INFO mapred.JobClient: Map input records=2
12/11/19 15:34:31 INFO mapred.JobClient: Reduce shuffle bytes=61
12/11/19 15:34:31 INFO mapred.JobClient: Spilled Records=8
12/11/19 15:34:31 INFO mapred.JobClient: Map output bytes=41
12/11/19 15:34:31 INFO mapred.JobClient: CPU time spent (ms)=1250
12/11/19 15:34:31 INFO mapred.JobClient: Total committed heap usage (bytes)=336338944
12/11/19 15:34:31 INFO mapred.JobClient: Combine input records=4
12/11/19 15:34:31 INFO mapred.JobClient: SPLIT_RAW_BYTES=228
12/11/19 15:34:31 INFO mapred.JobClient: Reduce input records=4
12/11/19 15:34:31 INFO mapred.JobClient: Reduce input groups=3
12/11/19 15:34:31 INFO mapred.JobClient: Combine output records=4
12/11/19 15:34:31 INFO mapred.JobClient: Physical memory (bytes) snapshot=326197248
12/11/19 15:34:31 INFO mapred.JobClient: Reduce output records=3
12/11/19 15:34:31 INFO mapred.JobClient: Virtual memory (bytes) snapshot=1128873984
12/11/19 15:34:31 INFO mapred.JobClient: Map output records=4

3、wordcount程序执行完毕,运行命令bin/hadoop fs -ls output。查看输出结果。如下:

hadoopusr@shan-pc:/usr/local/hadoop$ bin/hadoop fs -ls output
Found 3 items
-rw-r--r-- 2 hadoopusr supergroup 0 2012-11-19 15:34 /user/hadoopusr/output/_SUCCESS
drwxr-xr-x - hadoopusr supergroup 0 2012-11-19 15:34 /user/hadoopusr/output/_logs
-rw-r--r-- 2 hadoopusr supergroup 25 2012-11-19 15:34 /user/hadoopusr/output/part-r-00000

4、输入命令bin/hadoop fs -cat /user/hadoopusr/output/part-r-00000查看最后统计结果。结果如下:

hadoopusr@shan-pc:/usr/local/hadoop$ bin/hadoop fs -cat /user/hadoopusr/output/part-r-00000
hadoop 1
hello 2
world 1