如何在新 Ubuntu 实例上安装 Hadoop 和 Pydoop

How do I install Hadoop and Pydoop on a fresh Ubuntu instance

我看到的大多数设置说明都很冗长。是否有一组类似脚本的命令,我们可以执行这些命令来在 Amazon EC2 上的 Ubuntu 实例上设置 Hadoop 和 Pydoop?

创建一个 Ubuntu 实例。我将我的设置为 Ubuntu 14.04 Linux 在具有 20GB 数据存储(终止时删除)的 m3.medium 现场实例上,所有端口都打开(为了安全起见)。

ssh 到服务器并逐段复制粘贴下面的命令。

sudo apt-get -y update
sudo apt-get -y install default-jdk
ssh-keygen -t rsa -P ''                            # Press Enter when prompted

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

# See http://www.apache.org/dyn/closer.cgi/hadoop/common/ for latest file version
wget http://download.nextag.com/apache/hadoop/common/current/hadoop-2.6.0.tar.gz
tar xfz hadoop-2.6.0.tar.gz

# Replace the folder/file names for your system
export HADOOP_PREFIX=/home/ubuntu/hadoop-2.6.0
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

配置 Hadoop

# Add these into the Hadoop env
cat >> $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh <<EOF
export JAVA_HOME=${JAVA_HOME}
export HADOOP_PREFIX=${HADOOP_PREFIX}
EOF

cat > $HADOOP_PREFIX/etc/hadoop/core-site.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
EOF

cat > $HADOOP_PREFIX/etc/hadoop/hdfs-site.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
EOF

运行 独立节点并向其添加文件

# Format and start HDFS
$HADOOP_PREFIX/bin/hdfs namenode -format
$HADOOP_PREFIX/sbin/start-dfs.sh

# Create a folder
$HADOOP_PREFIX/bin/hdfs dfs -mkdir /user
$HADOOP_PREFIX/bin/hdfs dfs -mkdir /user/sample

# Copy input files into HDFS
$HADOOP_PREFIX/bin/hdfs dfs -put $HADOOP_PREFIX/etc/hadoop/*.xml /user/sample/

# Run example
$HADOOP_PREFIX/bin/hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep /user/sample /user/output 'dfs[a-z.]+'

安装 Pydoop

sudo apt-get -y install build-essential python-dev
sudo bash    # To avoid sudo pip install not geting the env variables
export HADOOP_HOME=/home/ubuntu/hadoop-2.6.0
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
pip install pydoop

使用此 Python 脚本测试 Pydoop:

import pydoop.hdfs
hdfs = pydoop.hdfs.hdfs()
hdfs.list_directory('/user/sample')
# This lists all files under /user/sample

另一种解决方案是使用 Juju(Ubuntu 的服务编排框架)。

首先在您的标准计算机上安装 Juju 客户端:

sudo add-apt-repository ppa:juju/stable
sudo apt-get update && sudo apt-get install juju-core

(MacOS 和 Windows 的说明也可用 here

然后生成配置文件

juju generate-config

并使用您首选的云凭证(AWS、Azure、GCE...)对其进行修改。根据 m3.medium 的命名,我假设您使用 AWS,因此遵循 these instructions

注意:以上只需要做一次。

现在bootstrap

 juju bootstrap amazon

像网站上提供的演示一样部署 GUI(可选)

juju deploy --to 0 juju-gui && juju expose juju-gui

您将找到 URL 的 GUI 和密码:

juju api-endpoints | cut -f1 -d":"
cat ~/.juju/environments/amazon.jenv | grep pass

请注意,以上步骤是任何 Juju 部署的准备步骤,每次您想要旋转环境时都可以重复使用。

现在介绍您的 Hadoop 用例。您有多种选择。

  1. 只需部署1个Hadoop节点

    juju deploy --constraints "cpu-cores=2 mem=4G root-disk=20G" hadoop
    

您可以使用

跟踪部署
juju debug-log

并使用

获取有关新实例的信息
juju status

这是部署 Hadoop 所需的唯一命令(您可以将 Juju 视为复杂系统的 apt 的演变)

  1. 使用 HDFS 和 MapReduce 部署 3 个节点的集群

    juju deploy hadoop hadoop-master
    juju deploy hadoop hadoop-slavecluster
    juju add-unit -n 2 hadoop-slavecluster
    juju add-relation hadoop-master:namenode hadoop-slavecluster:datanode
    juju add-relation hadoop-master:resourcemanager hadoop-slavecluster:nodemanager
    
  2. 横向扩展使用(单独的 HDFS 和 MapReduce,实验性)

    juju deploy hadoop hdfs-namenode
    juju deploy hadoop hdfs-datacluster
    juju add-unit -n 2 hdfs-datacluster
    juju add-relation hdfs-namenode:namenode hdfs-datacluster:datanode
    juju deploy hadoop mapred-resourcemanager
    juju deploy hadoop mapred-taskcluster
    juju add-unit -n 2 mapred-taskcluster
    juju add-relation mapred-resourcemanager:mapred-namenode hdfs-namenode:namenode
    juju add-relation mapred-taskcluster:mapred-namenode hdfs-namenode:namenode
    juju add-relation mapred-resourcemanager:resourcemanager mapred-taskcluster:nodemanager
    

对于 Pydoop,您必须像第一个答案一样手动部署它(您可以通过 "juju ssh " 访问 Juju 实例),或者您可以编写一个 "charm"(一个方法让 Juju 学习如何部署 pydoop)。