在这篇文章中,我希望分享在单节点中设置Apache Hadoop的过程。 Hadoop用于处理在低成本商品硬件上进行部署的大数据集。 它是一个map-reduce框架,它在集群中的节点之间映射作业的分段以执行。 尽管我们看不到Hadoop在单节点上运行的确切功能,但这是迈向多节点集群的第一步。 单节点设置对于熟悉操作和调试应用程序的准确性很有用,但是性能可能远低于可达到的水平。
我正在共享Linux系统上要遵循的步骤,因为它既是Hadoop的开发平台又是生产平台,都受到支持。 Win32仅作为开发平台受支持,并且必须遵循给定Linux命令的等效命令。 该Hadoop文档简要介绍了设置Hadoop的详细信息。 我在这里与以下人员分享有关设置过程的详细指南。
- 先决条件
- Hadoop配置
- 运行单节点群集
- 运行Map-reduce作业
先决条件
Java 1.6.X
为了运行Hadoop,需要在节点中安装Java,因为它是基于Java的框架。 我们可以通过以下方式检查节点的Java安装:
pushpalanka@pushpalanka-laptop:~$ java -version
java version '1.6.0_23'
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Server VM (build 19.0-b09, mixed mode)
如果未提供预期的输出,则需要通过运行以下命令来安装Java:
pushpalanka@pushpalanka-laptop:~$ sudo apt-get install sun-java6-jdk
或运行下载的二进制Java安装程序包 。 然后在相关的配置文件(对于Linux bash shell用户为.bashrc)中设置环境变量JAVA_HOME。
创建一个Hadoop用户
在这一步,我们创建一个专用于Hadoop安装的用户帐户。 这不是“必须做”的步骤,但出于安全原因和易于管理节点的考虑而建议这样做。 因此,我们创建了一个名为“ hadoop”的组,并使用以下命令将一个新用户添加到名为“ hpuser”的组(名称可以由我们选择)。
pushpalanka@pushpalanka-laptop:~$ sudo addgroup hadoop
pushpalanka@pushpalanka-laptop:~$ sudo adduser --ingroup hadoop hpuser
pushpalanka@pushpalanka-laptop:~$ su hpuser
hpuser@pushpalanka-laptop:~$
现在,我们将以hpuser作为最后一个命令。
启用SSH访问
Hadoop要求SSH(安全外壳)访问它用作节点的计算机。 这是为了创建安全的通道来交换数据。 因此,即使在单节点中,本地主机也需要hpuser的SSH访问权限,以便为Hadoop操作交换数据。 参考
如果您需要有关SSH的更多详细信息,请参阅此文档 。
我们可以使用以下命令安装SSH。
hpuser@pushpalanka-laptop:~$ sudo apt-get install ssh
现在,让我们尝试在不使用密码的情况下对localhost进行SSH。
hpuser@pushpalanka-laptop:~$ ssh localhost
Linux pushpalanka-laptop 2.6.32-33-generic #72-Ubuntu SMP Fri Jul 29 21:08:37 UTC 2011 i686 GNU/Linux
Ubuntu 10.04.4 LTS
Welcome to Ubuntu!
................................................
如果未提供与上述类似的信息,则必须启用对localhost的SSH访问,如下所示。
生成没有密码的RSA密钥对。 (我们不仅仅使用密码,因为那样会在每次Hadoop与节点通信时提示我们提供密码。)
hpuser@pushpalanka-laptop:~$ssh-keygen -t rsa -P ''
然后,我们需要将生成的公共密钥连接到本地主机的授权密钥列表中。 如下进行。 然后确保“ ssh localhost”成功。
hpuser@pushpalanka-laptop:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
现在,我们准备迁移到Hadoop。 :)使用Hadoop站点的最新稳定版本,而我使用hadoop-1.0.3。
Hadoop配置
设置Hadoop主页
在本文开头设置JAVA_HOME时,我们也需要设置HADOOP_HOME。 打开相同的文件(.bashrc),并在末尾添加以下两行。
export HADOOP_HOME=<absolute path to the extracted hadoop distribution>
export PATH=$PATH:$HADOOP_HOME/bin
禁用IPv6
由于在Hadoop集群内部无需进行IPv6寻址,因此我们将其禁用,以减少出错的可能性。 打开文件HADOOP_HOME / conf / hadoop-env.sh并添加以下行。
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
设置路径和配置
在同一hadoop-env.sh文件中,也添加JAVA_HOME。
export JAVA_HOME=<path to the java installation>
然后我们需要创建一个用作HDFS(Hadoop分布式文件系统)的目录。在您选择的位置创建目录,并确保目录的所有者为``hpuser''。 我将其称为“ temp_directory”。 我们可以做到的
hpuser@pushpalanka-laptop:~$ sudo chown hpuser:hadoop <absolute path to temp_directory>
现在,我们在相关文件中的<configuration>……</ configuration>标记内添加以下属性段。
conf / core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>path to temp_directory</value>
<description>Location for HDFS.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
<description>The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. </description>
</property>
conf / mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>localhost:54311</value>
<description>The host and port that the MapReduce job tracker runs
at. </description>
</property>
conf / hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default number of block replications.
</description>
</property>
上述值需要根据速度,空间和容错因素的优先级来确定。
格式化HDFS
每次我们创建新的Hadoop集群时都需要执行此操作。 如果我们在正在运行的集群上执行此操作,所有数据将丢失。这基本上是在集群的本地文件系统上创建Hadoop分布式文件系统。
hpuser@pushpalanka-laptop:~$ <HADOOP_HOME>/bin/hadoop namenode -format
12/09/20 14:39:56 INFO
namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = pushpalanka-laptop/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.0.3
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r
1335192; compiled by 'hortonfo' on Tue May 8 20:31:25 UTC 2012
************************************************************/
...
12/09/20 14:39:57 INFOnamenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at pushpalanka-laptop/127.0.1.1
************************************************************/
如果输出是上述内容,则HDFS成功格式化。 现在我们快完成了,并准备好查看操作了。
运行单节点群集
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ ./start-all.sh
你会看到,
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ ./start-all.sh
starting namenode, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-namenode-pushpalanka-laptop.out
localhost: starting datanode, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-datanode-pushpalanka-laptop.out
localhost: starting secondarynamenode, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-secondarynamenode-pushpalanka-laptop.out
starting jobtracker, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-jobtracker-pushpalanka-laptop.out
localhost: starting tasktracker, logging to /home/hpuser/hadoop-1.0.3/libexec/../logs/hadoop-hpuser-tasktracker-pushpalanka-laptop.out
启动几个节点和跟踪器。 我们可以使用Java中的jps工具观察这些Hadoop进程。
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ jps
5767 NameNode
6619 Jps
6242 JobTracker
6440 TaskTracker
6155 SecondaryNameNode
5958 DataNode
我们还可以检查Hadoop配置为监听的端口,
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ sudo netstat -plten | grep java
[sudo] password for hpuser:
tcp 0 0 0.0.0.0:33793 0.0.0.0:* LISTEN 1001 175415 8164/java
....
tcp 0 0 0.0.0.0:60506 0.0.0.0:* LISTEN 1001 174566 7767/java
tcp 0 0 0.0.0.0:50075 0.0.0.0:* LISTEN 1001 176269 7962/java
有几种Web界面可用于观察内部行为,作业完成,内存消耗等,如下所示。
- http:// localhost:50070 / – NameNode的Web UI
- http:// localhost:50030 / – JobTracker的Web UI
- http:// localhost:50060 / – TaskTracker的Web UI
目前,这不会显示任何信息,因为我们没有执行任何作业来观察进度。
我们可以使用以下命令随时停止集群。
hpuser@pushpalanka-laptop:~/hadoop-1.0.3/bin$ ./stop-all.sh
stopping jobtracker
localhost: stopping tasktracker
stopping namenode
localhost: stopping datanode
localhost: stopping secondarynamenode
运行地图缩减作业
让我们尝试使用Hadoop完成一些工作。 我们可以使用随Hadoop一起分发的单词计数示例,如Hadoop Wiki上此处所述。 简而言之,它的工作是将一些文本文件作为输入,计算将每行映射到映射器的不同单词的重复次数,并将简化后的结果输出为文本文件。
首先创建一个文件夹,然后复制一些包含10000个单词的.txt文件。 我们将计算这些单词的重复次数。
hpuser@pushpalanka-laptop:~/tempHadoop$ ls -l
total 1392
-rw-r--r-- 1 hpuser hadoop 1423810 2012-09-21 02:10 pg5000.txt
然后像以前一样使用start-all.sh文件重新启动集群。
将样本输入文件复制到HDFS。
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -copyFromLocal /home/hpuser/tempHadoop/ /user/hpuser/testHadoop
让我们检查一下是否正确复制了HDFS,
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -ls /user/hpuser/testHadoop
Found 1 items
-rw-r--r-- 1 hpuser supergroup 1423810 2012-09-21 02:17 /user/hpuser/testHadoop/pg5000.txt
现在输入已准备就绪。 让我们运行map reduce作业。 为此,我们使用随Hadoop一起分发的jar来完成有需要的编写,以后可以参考并了解事情的完成方式。
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop jar hadoop*examples*.jar wordcount /user/hpuser/testHadoop /user/hpuser/testHadoop-output
12/09/21 02:24:34 INFO input.FileInputFormat: Total input paths to process : 1
12/09/21 02:24:34 INFO util.NativeCodeLoader: Loaded the native-hadoop library
12/09/21 02:24:34 WARN snappy.LoadSnappy: Snappy native library not loaded
12/09/21 02:24:34 INFO mapred.JobClient: Running job: job_201209210216_0003
12/09/21 02:24:35 INFO mapred.JobClient: map 0% reduce 0%
12/09/21 02:24:51 INFO mapred.JobClient: map 100% reduce 0%
12/09/21 02:25:06 INFO mapred.JobClient: map 100% reduce 100%
12/09/21 02:25:11 INFO mapred.JobClient: Job complete: job_201209210216_0003
12/09/21 02:25:11 INFO mapred.JobClient: Counters: 29
12/09/21 02:25:11 INFO mapred.JobClient: Job Counters
12/09/21 02:25:11 INFO mapred.JobClient: Launched reduce tasks=1
12/09/21 02:25:11 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=17930
12/09/21 02:25:11 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0
12/09/21 02:25:11 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0
12/09/21 02:25:11 INFO mapred.JobClient: Launched map tasks=1
12/09/21 02:25:11 INFO mapred.JobClient: Data-local map tasks=1
12/09/21 02:25:11 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=14153
12/09/21 02:25:11 INFO mapred.JobClient: File Output Format Counters
12/09/21 02:25:11 INFO mapred.JobClient: Bytes Written=337639
12/09/21 02:25:11 INFO mapred.JobClient: FileSystemCounters
12/09/21 02:25:11 INFO mapred.JobClient: FILE_BYTES_READ=466814
12/09/21 02:25:11 INFO mapred.JobClient: HDFS_BYTES_READ=1423931
12/09/21 02:25:11 INFO mapred.JobClient: FILE_BYTES_WRITTEN=976811
12/09/21 02:25:11 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=337639
12/09/21 02:25:11 INFO mapred.JobClient: File Input Format Counters
12/09/21 02:25:11 INFO mapred.JobClient: Bytes Read=1423810
12/09/21 02:25:11 INFO mapred.JobClient: Map-Reduce Framework
12/09/21 02:25:11 INFO mapred.JobClient: Map output materialized bytes=466814
12/09/21 02:25:11 INFO mapred.JobClient: Map input records=32121
12/09/21 02:25:11 INFO mapred.JobClient: Reduce shuffle bytes=466814
12/09/21 02:25:11 INFO mapred.JobClient: Spilled Records=65930
12/09/21 02:25:11 INFO mapred.JobClient: Map output bytes=2387668
12/09/21 02:25:11 INFO mapred.JobClient: CPU time spent (ms)=9850
12/09/21 02:25:11 INFO mapred.JobClient: Total committed heap usage (bytes)=167575552
12/09/21 02:25:11 INFO mapred.JobClient: Combine input records=251352
12/09/21 02:25:11 INFO mapred.JobClient: SPLIT_RAW_BYTES=121
12/09/21 02:25:11 INFO mapred.JobClient: Reduce input records=32965
12/09/21 02:25:11 INFO mapred.JobClient: Reduce input groups=32965
12/09/21 02:25:11 INFO mapred.JobClient: Combine output records=32965
12/09/21 02:25:11 INFO mapred.JobClient: Physical memory (bytes) snapshot=237834240
12/09/21 02:25:11 INFO mapred.JobClient: Reduce output records=32965
12/09/21 02:25:11 INFO mapred.JobClient: Virtual memory (bytes) snapshot=778846208
12/09/21 02:25:11 INFO mapred.JobClient: Map output records=251352
如果我们尝试使用前面提到的Web界面,则在运行作业时,我们可以以汇总方式观察资源的进度和利用率。 如命令中所给,将带有字数统计的输出文件写入'/ user / hpuser / testHadoop-output'。
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -ls /user/hpuser/testHadoop-output
Found 3 items
-rw-r--r-- 1 hpuser supergroup 0 2012-09-21 02:25 /user/hpuser/testHadoop-output/_SUCCESS
drwxr-xr-x - hpuser supergroup 0 2012-09-21 02:24 /user/hpuser/testHadoop-output/_logs
-rw-r--r-- 1 hpuser supergroup 337639 2012-09-21 02:25 /user/hpuser/testHadoop-output/part-r-00000
要查看文件内部内容,让我们将其复制到本地文件系统中。
hpuser@pushpalanka-laptop:~/hadoop-1.0.3$ bin/hadoop dfs -getmerge /user/hpuser/testHadoop-output /home/hpuser/tempHadoop/out
12/09/21 02:38:10 INFO util.NativeCodeLoader: Loaded the native-hadoop library
如果有多个文件,这里的getmerge选项用于合并,然后给出输出文件夹的HDFS位置以及在本地文件系统中输出所需的位置。 现在,您可以浏览到给定的输出文件夹并打开结果文件,根据您的输入文件,结果文件将如下所示。
"1 1
'1,' 1
'35' 1
'58,' 1
'AS'. 1
'Apple 1
'Abs 1
'Ah! 1
现在,我们已经完成了使用Apache Hadoop设置单节点集群并运行map-reduce作业的过程。 在下一篇文章中,我将分享如何设置多节点集群。
原始资料
Hadoop单节点设置– Guchex 。 普希帕兰卡(Pushpalanka Jayawardhana)
参考:在Pushpalanka的Blog博客上,由我们的JCG合作伙伴 Pushpalanka 设置的Hadoop单节点 。
翻译自: https://www.javacodegeeks.com/2012/11/hadoop-single-node-set-up.html