我正在尝试在 Ubuntu 12.04 版本中安装 Hadoop。按照以下说明
http://michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/,我java-6-openjdk
从 Ubuntu 软件中心安装。我已java_home
在 中设置.bashrc
。也在java_home
Hadoop 中设置conf/env.sh
。格式化 namenode 时,我收到以下错误:
usr/lib/jvm/java-6-openjdk/bin/java no such file or directory.
谢谢。但是它是 64 位操作系统。
答案1
我在使用 12.04 时遵循的指南是:
我实际上反对 MyLearning,因为它首先推荐的是 Oracle Java 7 而不是 OpenJDK 7,但是我在尝试时遇到了 OpenJDK 7 的一些问题,所以我不得不选择 Oracle。
该指南大部分内容很简单,如下所示:
安装 Java
sudo add-apt-repository ppa:webupd8team/java sudo apt-get update && sudo apt-get upgrade sudo apt-get install oracle-java7-installer
创建 Hadoop 用户
sudo addgroup hadoop sudo adduser --ingroup hadoop hduser
其中 hduser 是您想要拥有的 Hadoop 用户。
配置 SSH
su - hduser ssh-keygen -t rsa -P "" cat .ssh/id_rsa.pub >> .ssh/authorized_keys
为了确保 SSH 安装顺利,您可以打开一个新终端并尝试使用
hduser
以下命令创建 ssh 会话:ssh localhost
如果 localhost 没有连接,请重新安装 ssh(您可能需要
hduser
按照以下步骤添加 sudo)sudo apt-get install openssh-server
编辑 Sudoers
sudo visudo
在行末添加将 hduser 添加到 sudoers 中
hduser ALL=(ALL:ALL) ALL
要保存,请按CTRL+ X,输入Y并按ENTER
禁用 IPv6
sudo gedit /etc/sysctl.conf
或者
sudo nano /etc/sysctl.conf
将以下几行复制至文件末尾:
#disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
如果你遇到问题,提示你没有权限,只需使用 root 帐户运行上一个命令(以防 sudo 不够用。对我来说是这样的)
现在重新启动。
您也可以这样做
sudo sysctl -p
,但我宁愿重新启动。重启后,检查确保 IPv6 已关闭:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
应该说1.如果它说0,你遗漏了一些东西。
安装 Hadoop
有几种方法可以做到这一点,指南建议的方法是从Apache Hadoop 站点并将文件解压到您的
hduser
主文件夹中。将解压的文件夹重命名为hadoop
。另一种方法是使用针对 12.04 测试过的 PPA:
sudo add-apt-repository ppa:hadoop-ubuntu/stable sudo apt-get update && sudo apt-get upgrade sudo apt-get install hadoop
注意:PPA 可能对某些人有用,但对其他人则不行。我尝试从官方网站下载,因为我不了解 PPA。
更新
$HOME/.bashrc
您需要更新
.bashrc
(hduser
以及管理 Hadoop 所需的每个用户)。要打开.bashrc
文件,您需要以 root 身份打开它:sudo gedit /home/hduser/.bashrc
或者
sudo nano /home/hduser/.bashrc
.bashrc
然后在文件末尾添加以下配置# Set Hadoop-related environment variables export HADOOP_HOME=/home/hduser/hadoop # Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)` export JAVA_HOME=/usr/lib/jvm/java-7-oracle
现在,如果你有 OpenJDK7,它看起来会像这样:
export JAVA_HOME=/usr/lib/java-7-openjdk-amd64
这里要注意的是 Java 所在的文件夹与 AMD64 版本。如果上述方法不起作用,您可以尝试查找该特定文件夹或设置将要使用的 Java:
sudo update-alternatives --config java
现在介绍一些有用的别名:
# Some convenient aliases and functions for running Hadoop-related commands unalias fs &> /dev/null alias fs="hadoop fs" unalias hls &> /dev/null alias hls="fs -ls" # Add Hadoop bin/ directory to PATH export PATH=$PATH:$HADOOP_HOME/bin
配置 Hadoop
以下是我们可以用来进行正确配置的配置文件。您将在 Hadoop 中使用的一些文件是(更多信息请参见本网站):
start-dfs.sh
- 启动 Hadoop DFS 守护进程、namenode 和 datanode。在 start-mapred.sh 之前使用此命令stop-dfs.sh
- 停止 Hadoop DFS 守护进程。start-mapred.sh
- 启动 Hadoop Map/Reduce 守护进程、jobtracker 和 tasktrackers。stop-mapred.sh
- 停止 Hadoop Map/Reduce 守护进程。start-all.sh
- 启动所有 Hadoop 守护进程、namenode、datanode、jobtracker 和 tasktrackers。已弃用;使用 start-dfs.sh,然后使用 start-mapred.shstop-all.sh
- 停止所有 Hadoop 守护进程。已弃用;使用 stop-mapred.sh 然后使用 stop-dfs.sh但在开始使用它们之前,我们需要修改
/conf
文件夹中的几个文件。hadoop-环境变量
查找文件
hadoop-env.sh
,我们只需要更新此文件中的 JAVA_HOME 变量:sudo gedit /home/hduser/hadoop/conf/hadoop-env.sh
或者
sudo nano /home/hduser/hadoop/conf/hadoop-env.sh
或者在最新版本中它将在
sudo nano /etc/hadoop/conf.empty/hadoop-env.sh
或者
sudo nano /etc/hadoop/hadoop-env.sh
然后更改以下行:
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
到
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
注意:如果在启动服务时出现
Error: JAVA_HOME is not set
错误,则您忘记取消注释上一行(只需删除#)。核心站点.xml
现在我们需要为 Hadoop 框架创建一个临时目录。如果您需要此环境进行测试或快速原型(例如,为您的个人测试开发简单的 Hadoop 程序...),我建议在
/home/hduser/
目录下创建此文件夹,否则,您应该在共享文件夹下的共享位置创建此文件夹(如 /usr/local...),但您可能会遇到一些安全问题。但为了克服可能由安全性引起的异常(如 java.io.IOException),我在 hduser 空间下创建了 tmp 文件夹。要创建此文件夹,请输入以下命令:
sudo mkdir /home/hduser/tmp
请注意,如果您想创建另一个管理员用户(例如,hadoop 组中的 hduser2),您应该使用以下命令授予他对此文件夹的读写权限:
sudo chown hduser:hadoop /home/hduser/tmp sudo chmod 755 /home/hduser/tmp
现在,我们可以打开
hadoop/conf/core-site.xml
并编辑 hadoop.tmp.dir 条目。我们可以使用文本编辑器打开 core-site.xml:sudo gedit /home/hduser/etc/hadoop/core-site.xml
或者
nano /home/hduser/etc/hadoop/core-site.xml
然后添加以下配置
<configure>
xml 元素之间:<property> <name>hadoop.tmp.dir</name> <value>/home/hduser/tmp</value> <description>A base for other temporary directories.</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. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description> </property>
现在编辑
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. If "local", then jobs are run in-process as a single map and reduce task. </description> </property>
现在编辑
hdfs-site.xml
<property> <name>dfs.replication</name> <value>1</value> <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. </description> </property>
格式化 NameNode
现在您可以开始处理 Node。第一种格式:
~/hduser/hadoop/bin/hadoop namenode -format
或者
./home/hduser/hadoop/bin/hadoop namenode -format
您应该格式化 HDFS 中的 NameNode。您不应该在系统运行时执行此步骤。通常在首次安装时执行一次。
启动 Hadoop 集群
您需要导航到 hadoop/bin 目录并运行
./start-all.sh
脚本。cd ~/hduser/hadoop/bin/ start-all.sh
如果您拥有的版本与指南中显示的版本不同(如果使用 PPA 或较新版本执行此操作,您很可能拥有这些版本),请尝试以下方式:
cd ~/hduser/hadoop/bin/ start-dfs.sh start-mapred.sh
这将在您的机器上启动 Namenode、Datanode、Jobtracker 和 Tasktracker。
检查 Hadoop 是否正在运行
有一个很好的工具叫做
jps
。您可以使用它来确保所有服务都已启动。在您的 hadoop bin 文件夹中输入:jps
它应该向您显示所有与 Hadoop 相关的进程。
注意:由于这项工作大约在 6 个月前完成,因此如果有任何部分无法正常工作,请告诉我。
Hadoop 使用 Juju(Hadoop 的 Juju Charm)
我假设已经设置了以下内容:
- 您有一个已设置 Juju 的服务器
- 您可以访问服务器(本地或远程)
- 您已配置 Juju 并准备开始添加 charms
- 您正在使用 12.04(这是因为我用 12.04 测试了所有这些)
- 您已经配置了
~/.juju/environments.yaml
有关您将要使用的服务器的信息,包括 PPA 来源。
好的,现在按照以下步骤运行 Hadoop 服务:
引导 Hadoop 环境
juju bootstrap
等待其完成然后检查其是否连接正确:
juju status
部署 Hadoop(主服务器和从服务器)
juju deploy --constraints="instance-type=m1.large" hadoop hadoop-master juju deploy --constraints="instance-type=m1.medium" -n 5 hadoop hadoop-slave
创建关系
juju add-relation hadoop-master:namenode hadoop-slave:datanode juju add-relation hadoop-master:jobtracker hadoop-slave:tasktracker
公开 Hadoop(由于您已经部署并创建了关系,因此服务应该正在运行)
juju expose hadoop-master
并检查状态以查看其是否正常工作:
juju status hadoop-master
到目前为止,您已经有一个正在运行的 Hadoop。您还可以执行更多操作,请参阅提供的链接或官方适用于 Hadoop 的 Juju Charm
要了解最新的 JuJu Charms(设置、分步指南等),您可以访问:朱朱魅力并创建您自己的 JuJu 环境,查看每个文件的设置方式以及每个服务的连接方式。
答案2
JAVA_HOME
我通过将路径设置为 成功安装了 Hadoop usr/lib/jvm/java-6-openjdk-amd64
。
答案3
源自@Luis Alvarado 的回答,这是我的 Ubuntu 14.04 和 Hadoop 2.5.1 版本
简单来说
- 安装 Java
- 准备一个执行用户对于 Hadoop
hduser
hduser
从现在起切换到- 允许
hduser
通过无密码的 ssh 进行远程访问 - 禁用 IPv6
- 下载并配置 Hadoop 包
- 准备系统路径 $HADOOP_HOME 和 $JAVA_HOME
- 配置 Hadoop 的服务
- 启动Hadoop的服务
完成。祝你好运!
详细步骤
安装 Java
下载并安装
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install oracle-java7-installer
确保已安装 Java7
$ which java
$ ls -l /usr/bin/java
$ ls -l /etc/alternatives/java
我们应该java
指出/usr/lib/jvm/java-7-oracle/jre/bin/java
准备一个执行用户对于 Hadoophduser
hduser
在组中创建用户hadoop
$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hduser
授予hduser
须藤特权
编辑 sudo
$ sudo visudo
在末尾添加此行
hduser ALL=(ALL:ALL) ALL
hduser
从现在起切换到
$ su - hduser
允许hduser
通过无密码的 ssh 进行远程访问
安装 openssh
$ sudo apt-get install openssh-server
为 SSH 连接生成 RSA 公钥/私钥;密码为空,如下所示parameter -P ""
$ ssh-keygen -t rsa -P ""
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
确保hduser
本地 ssh 远程无需密码
$ ssh localhost
禁用 IPv6
编辑配置文件
$ sudo nano /etc/sysctl.conf
复制到最后
#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
确保 IPv6 已关闭,请重启或致电
$ sudo sysctl -p
然后打电话
$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
应该显示 1,表示 OK ^^
下载并配置 Hadoop 包
从以下网址下载 Hadoop 2.5.1 软件包Apache Hadoop 站点
此包的直接 URL 是此链接
http://www.eu.apache.org/dist/hadoop/core/hadoop-2.5.1/hadoop-2.5.1.tar.gz
因此,让我们下载到hduser
主文件夹,提取它,然后将其重命名为hadoop
$ wget http://www.eu.apache.org/dist/hadoop/core/hadoop-2.5.1/hadoop-2.5.1.tar.gz
$ tar -xvzf hadoop-2.5.1.tar.gz
$ mv hadoop-2.5.1 hadoop
确保我们hduser
在家中存储了 Hadoop
$ ls /home/hduser/hadoop
准备系统路径 $HADOOP_HOME 和 $JAVA_HOME
编辑hduser
.bashrc 文件
$ nano .bashrc
$HADOOP_HOME
将和的值放在最后$JAVA_HOME
# Set Hadoop-related environment variables
export HADOOP_HOME=/home/hduser/hadoop
# Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
将 Hadoopbinary
文件夹添加到系统$PATH
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
打开一个新终端,以身份登录hduser
,并确保 $HADOOP_HOME 具有可用的命令
$ echo $HADOOP_HOME
$ which start-all.sh
$ which start-dfs.sh
$ which start-yarn.sh
我们应该看到这些名字的完整路径。
配置 Hadoop 的服务
Hadoop 中的每个组件都使用 XML 文件进行配置。
公共属性核心站点.xml
HDFS 属性hdfs-site.xml
MapReduce 属性进入mapred-站点.xml
这些文件都位于文件夹中$HADOOP_HOME/etc/hadoop
再次定义 JAVA_HOME,hadoop-env.sh
方法是编辑以下行
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
定义 Hadooptemp folder
并file system
命名核心站点.xml在
<configuration>
...
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hduser/tmp</value>
<description>A base for other temporary directories.</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. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.</description>
</property>
...
</configuration>
我们需要temp folder
按照以下配置进行准备/home/hduser/tmp
$ cd /home/hduser
$ mkdir tmp
$ chown hduser:hadoop tmp
$ chmod 755 tmp
定义file system
在block replication
hdfs-site.xml
<configuration>
...
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
</description>
</property>
...
</configuration>
定义map-reduce job
在mapred-站点.xml
<configuration>
...
<property>
<name>mapred.job.tracker</name>
<value>localhost:54311</value>
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
...
</configuration>
格式name node
$ hdfs namenode -format
启动 Hadoop 服务
称呼
$ start-dfs.sh && start-yarn.sh
这两个命令位于$HADOOP_HOME/sbin我们之前已将其添加到系统 $PATH 中。
确保 Hadoop 服务已正确启动
$ jps
我们应该看到
答案4
有关最新教程(不确定是否有区别),请查看hadoop 截屏视频视频教程。他们提供视频和实际的安装命令。此外,如果您给作者发送电子邮件,他会非常乐意回复并帮助您解决任何问题。
这些说明与@Luis 回复的说明大致相似。