我看到的大部分设置说明都很详细。是否有类似脚本的命令集,我们可以执行这些命令来在Amazon EC2上的Ubuntu实例上设置Hadoop和Pydoop?
答案 0 :(得分:9)
另一个解决方案是使用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
注意:上述内容只需进行一次。
现在引导
juju bootstrap amazon
部署GUI(可选),如网站上提供的演示
juju deploy --to 0 juju-gui && juju expose juju-gui
您可以在以下位置找到GUI和密码的URL:
juju api-endpoints | cut -f1 -d":"
cat ~/.juju/environments/amazon.jenv | grep pass
请注意,上述步骤是任何Juju部署的初步步骤,并且每次您想要旋转环境时都可以重复使用。
现在是Hadoop的用例。你有几个选择。
只需部署Hadoop的1个节点
juju deploy --constraints "cpu-cores=2 mem=4G root-disk=20G" hadoop
您可以使用
跟踪部署juju debug-log
并使用
获取有关新实例的信息juju status
这是您部署Hadoop所需的唯一命令(您可以将Juju视为复杂系统的apt演变)
使用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
扩展用法(单独的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实例),或者你可以写一个“魅力”(Juju的一种方法来学习如何部署pydoop)。
答案 1 :(得分:2)
创建一个Ubuntu实例。我在m3.medium现场实例上设置了一个Ubuntu 14.04 Linux,其中包含20GB数据存储(终止时删除),所有端口都打开(为安全起见)。
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