Hadoop是一个用Java编写的框架,它允许在大型商品硬件集群上以分布式方式处理大型数据集。
Hadoop由Doug Cutting创建,他在阅读了2003年和2004年发布Google文档“ Google文件系统 ”和“ MapReduce:大型集群简化数据处理 ”后获得了Hadoop的灵感。
根据项目主页,Hadoop包含四个模块; Hadoop Common,Hadoop分布式文件系统(HDFS),Hadoop YARN和Hadoop MapReduce。围绕Hadoop构建出了一个完整的生态系统; 包括又Apache Hive,Apache Pig,Apache ZooKeeper等项目......
启动Hadoop集群的模式有三种:
在这篇文章中,我的目标是让Hadoop在本地(独立)模式和伪分布式模式下运行在Ubuntu主机上。
Hadoop支持Linux作为开发和生产平台。由于Hadoop能够在任何Linux发行版上运行,我选择的平台是Ubuntu,但使用不同Linux发行版的读者也可以参照。请注意,环境配置可能因不同的分配而有所不同。
本文中,我将使用Ubuntu 14.04 LTS和Apache Hadoop 2.5.1。
由于Hadoop是用Java编写的,Java应该安装在你的Ubuntu主机中。推荐的Java版本请参考此链接。在命令行中执行以下命令来检查您是否已经在您的机器上安装了Java。
$ javac
$ java -version
如果你还没有安装Java,这个链接提供了一个很好的资源。
当你安装好了Java,您应该将JAVA_HOME/bin设置为您的PATH,来确保可以从命令行调用Java。如果想要永久保存JAVA_HOME环境变量,请使用以下命令打开~/ .profile文件。
$ gedit ~/.profile
在该文件中添加以下行并保存。
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export PATH=$JAVA_HOME/bin
请注意,在编辑之后,您应该重新登录来初始化变量,但您也可以使用以下命令并在不重新登录的情况下使用该变量。也有许多不同的方法可以在Ubuntu中保存环境变量,请参阅此链接以进一步了解。
$ source ~/.profile
1.从此链接下载最新的稳定版Hadoop版本。你很可能会下载一个名字类似Hadoop-2.5.1.tar.gz的文件;
2.我更喜欢将Hadoop安装在/usr/local目录中。使用以下命令解压下载的文件。
tar -xf hadoop-2.5.1.tar.gz -C /usr/local/
export HADOOP_PREFIX=/usr/local/hadoop-2.5.0
export PATH=$HADOOP_PREFIX/bin:$PATH
$ export JAVA_HOME=/usr/lib/jvm/java-7-oracle$ export HADOOP_PREFIX=/usr/local/hadoop-2.5.1
6.如果执行以下命令显示Hadoop脚本的用法文档,那么您最好使用上述三种模式之一启动Hadoop集群。
7.
$ hadoop
Hadoop被默认配置为以单个Java进程运行,该进程在非分布式模式下运行。独立模式很容易进行测试和调试,所以在开发阶段通常很有用。此外,Hadoop的后台程序不会在此模式下启动。由于Hadoop的默认属性设置为独立模式,并且没有Hadoop后台进程可以运行,所以到这儿我们没有其他步骤可以执行了。
该模式以多个Hadoop后台程序在本地机器上运行来模拟小型集群。每个Hadoop后台程序都在单独的Java进程上运行。伪分布模式是全分布模式的一个特例。
要启用伪分布式模式,您需要编辑以下两个XML文件。这些XML文件在单个配置元素中包含多个属性元素。属性元素包含名称和值元素。
etc/hadoop/core-site.xml
etc/hadoop/hdfs-site.xml
编辑core-site.xml并修改以下属性。fs.defaultFS 属性保存的是NameNode的位置。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
编辑hdfs-site.xml并修改以下属性。dfs.replication 属性保存的是每个HDFS块应该被复制的次数。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
在典型的集群中,Hadoop用户应该能够在集群中的机器上执行命令,而不必为每一次登录输入密码。如果我们使用密码登录到集群中的机器,我们将不得不继续到每台机器并开始所有的流程。
就像我之前提到的,在伪分布式模式下,我们需要启动Hadoop守护进程。主机(单个)是本地主机,我们需要一种方式来登录本地主机而不需要输入密码并在那里启动Hadoop守护进程。要做到这一点,我们需要ssh,我们需要确保我们可以在不提供密码的情况下ssh到localhost。要允许无密码登录,我们需要创建一个密码为空的ssh密钥对。
ssh提供了一种使用基于密钥的身份验证来安全登录到远程系统而无需使用密码的方法。基于密钥的身份验证会创建一对密钥; 一个私钥和一个公钥。私钥将作为客户端机器的秘密保存。公钥可以放在你想访问的任何服务器上。简而言之,当客户端尝试连接到服务器时会发生什么情况,服务器将使用客户端的公钥生成一条消息给客户端,只有客户端可以使用它的私钥读取它。根据服务器从客户端获得的响应,服务器可以决定客户端是否被授权。
使用以下命令安装ssh和sshd。
$ sudo apt-get install ssh
使用以下命令验证安装。
$ which ssh
##Should print '/usr/bin/ssh'
$ which sshd
##Should print '/usr/bin/sshd'
$ ssh localhost
请注意,如果您在没有事先安装ssh的情况下尝试将ssh添加到localhost,则会显示一条错误消息'ssh:connect to host localhost port 22:Connection refused'。所以请确保要先安装ssh。
$ ssh-keygen -t dsa -P'' -f~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ ssh localhost
core-site.xml 文件中的 hadoop.tmp.dir 属性将位置保存到基本HDFS目录。请注意,此属性配置不依赖于运行Hadoop的模式。hadoop.tmp.dir 属性的默认值为 /tmp,并且存在这样的风险,即某些linux发行版可能会在每次重新引导时丢弃本地文件系统中的 /tmp 目录的内容,并导致本地文件中的数据丢失系统,因此出于安全考虑,将基本目录的位置更改为非常可靠的位置是有意义的。
执行以下步骤来更改基本HDFS目录的位置。
$ mkdir /var/lib/hadoop
$ chmod 777 /var/lib/hadoop
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/lib/hadoop</value>
</property>
</ configuration>
在第一次以伪分布式模式启动Hadoop群集之前,我们需要先格式化HDFS文件系统。请注意,多次格式化文件系统将会删除现有的文件系统数据。
在命令行上执行以下命令来格式化HDFS文件系统。
$ hdfs namenode -format
$ $HADOOP_PREFIX/sbin/start-dfs.sh
现在您可以通过 http://localhost:50070/ 来访问问名称节点的Web界面。
在Hadoop中,每个用户的主目录都存储在 /user 目录下。
使用以下命令创建主目录。
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/hadoop
请注意,这是一个明确的步骤,即使您没有执行此步骤,Hadoop将通过您登录到本地计算机的名称自动生成主目录。例如,如果我以用户名pavithra身份登录到本地计算机,HDFS中的主目录将为 /user/pavithra。所以为了利用前面的步骤,您应该以一个名为hadoop的用户身份登录到本地计算机。
$ hdfs dfs -mkdir input
$ hdfs dfs -put $ HADOOP_PREFIX / etc / hadoop input
$ hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar grep inpput output 'dfs+'
Hadoop本身会创建您在此命令中指定的输出目录。如果您正好指定的目录是HDFS中已经存在的目录,Hadoop将提示出现异常,指出“输出目录已存在”。Hadoop以此来确保以前作业的数据不会被当前作业的数据所替换覆盖。
$ hdfs dfs -get output output
$ cat output/*
或者您可以使用以下命令查看HDFS自身的输出文件。
$ bin/hdfs dfs -cat output/*
请注意,输出目录内的结果文件遵循part-nnnnn的命名约定。
$ $HADOOP_PREFIX/sbin/stop-dfs.sh
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有