搭建Hadoop平台(澳门美高梅手机网站新手入门)

福寿年高原理:接纳WebClient举办批量下载职分,简单的画虎类犬迅雷下载效果!

刚刚大学结业,接触大数量有一年的年月了,把自个儿的一部分读书笔记分享给大家,希望同热爱大数额的伙伴们一起上学,成长!

废话不多说,先看掩饰效果:

 资料准备:

澳门美高梅手机网站 1

  Hadoop-2.7.1下载:http://pan.baidu.com/s/1o7LKaSU 密码:64du

实际落到实处步骤如下:

  Jdk下载(文中使用1.7,那里给得1.8,不影响使用):http://pan.baidu.com/s/1kVEEJ91
密码:r22t

1.新建项目:WinBatchDownload

安装步骤:

2.先建四个Windows窗体:FrmBatchDownload,加载事件FrmBatchDownload_Load

0.闭馆防火墙

3.停放1个Button按钮:btnStartDownLoad,单机事件btnStartDownLoad_Click

执行:service iptables
stop 这一个命令关闭完防火墙后,假诺重启,防火墙会重新创造,所以,即使想重启后防火墙还关闭,需额外执行:chkconfig iptables off

4.停放3个DataGridView:dgvDownLoad.

1.配备主机名

5.切实可行代码如下:

执行: vim
/etc/sysconfig/network

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
#region 命名空间

using System.Threading;
using System.Runtime.InteropServices;
using System.Net;
using System.Collections;

#endregion

namespace WinBatchDownload
{
    public partial class FrmBatchDownload : Form
    {
        #region 全局成员

        //存放下载列表
        List<SynFileInfo> m_SynFileInfoList;

        #endregion

        #region 构造函数

        public FrmBatchDownload()
        {
            InitializeComponent();
            m_SynFileInfoList = new List<SynFileInfo>();
        }

        #endregion

        #region 窗体加载事件

        private void FrmBatchDownload_Load(object sender, EventArgs e)
        {
            //初始化DataGridView相关属性
            InitDataGridView(dgvDownLoad);
            //添加DataGridView相关列信息
            AddGridViewColumns(dgvDownLoad);
            //新建任务
            AddBatchDownload();
        }

        #endregion

        #region 添加GridView列

        /// <summary>
        /// 正在同步列表
        /// </summary>
        void AddGridViewColumns(DataGridView dgv)
        {
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                DataPropertyName = "DocID",
                HeaderText = "文件ID",
                Visible = false,
                Name = "DocID"
            });
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                AutoSizeMode = DataGridViewAutoSizeColumnMode.None,
                DataPropertyName = "DocName",
                HeaderText = "文件名",
                Name = "DocName",
                Width = 300
            });
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                DataPropertyName = "FileSize",
                HeaderText = "大小",
                Name = "FileSize",
            });
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                DataPropertyName = "SynSpeed",
                HeaderText = "速度",
                Name = "SynSpeed"
            });
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                DataPropertyName = "SynProgress",
                HeaderText = "进度",
                Name = "SynProgress"
            });
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                DataPropertyName = "DownPath",
                HeaderText = "下载地址",
                Visible = false,
                Name = "DownPath"
            });
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                DataPropertyName = "SavePath",
                HeaderText = "保存地址",
                Visible = false,
                Name = "SavePath"
            });
            dgv.Columns.Add(new DataGridViewTextBoxColumn()
            {
                DataPropertyName = "Async",
                HeaderText = "是否异步",
                Visible = false,
                Name = "Async"
            });
        }

        #endregion

        #region 添加下载任务并显示到列表中

        void AddBatchDownload()
        {
            //清空行数据
            dgvDownLoad.Rows.Clear();
            //添加列表(建立多个任务)
            List<ArrayList> arrayListList = new List<ArrayList>();
            arrayListList.Add(new ArrayList(){
                "0",//文件id
                "PPTV客户端.exe",//文件名称
                "21.2 MB",//文件大小
                "0 KB/S",//下载速度
                "0%",//下载进度
                "http://download.pplive.com/pptvsetup_3.2.1.0076.exe",//远程服务器下载地址
                "D:\\PPTV客户端.exe",//本地保存地址
                true//是否异步
            });
            arrayListList.Add(new ArrayList(){
                "1",
                "PPS客户端.exe",
                "14.3 MB",
                "0 KB/S",
                "0%",
                "http://download.ppstream.com/ppstreamsetup.exe",
                "D:\\PPS客户端.exe",
                true
            });
            arrayListList.Add(new ArrayList(){
                "2",
                "美图看看客户端.exe",
                "4.1 MB",
                "0 KB/S",
                "0%",
                "http://kankan.dl.meitu.com/V2/1029/KanKan_kk360Setup.exe",
                "D:\\美图看看客户端.exe",
                true
            });
            foreach (ArrayList arrayList in arrayListList)
            {
                int rowIndex = dgvDownLoad.Rows.Add(arrayList.ToArray());
                arrayList[2] = 0;
                arrayList.Add(dgvDownLoad.Rows[rowIndex]);
                //取出列表中的行信息保存列表集合(m_SynFileInfoList)中
                m_SynFileInfoList.Add(new SynFileInfo(arrayList.ToArray()));
            }
        }

        #endregion

        #region 开始下载按钮单机事件

        private void btnStartDownLoad_Click(object sender, EventArgs e)
        {
            //判断网络连接是否正常
            if (isConnected())
            {
                //设置不可用
                btnStartDownLoad.Enabled = false;
                //设置最大活动线程数以及可等待线程数
                ThreadPool.SetMaxThreads(3, 3);
                //判断是否还存在任务
                if (m_SynFileInfoList.Count <= 0) AddBatchDownload();
                foreach (SynFileInfo m_SynFileInfo in m_SynFileInfoList)
                {
                    //启动下载任务
                    StartDownLoad(m_SynFileInfo);
                }
            }
            else
            {
                MessageBox.Show("网络异常!");
            }
        }

        #endregion

        #region 检查网络状态

        //检测网络状态
        [DllImport("wininet.dll")]
        extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);
        /// <summary>
        /// 检测网络状态
        /// </summary>
        bool isConnected()
        {
            int I = 0;
            bool state = InternetGetConnectedState(out I, 0);
            return state;
        }

        #endregion

        #region 使用WebClient下载文件

        /// <summary>
        /// HTTP下载远程文件并保存本地的函数
        /// </summary>
        void StartDownLoad(object o)
        {
            SynFileInfo m_SynFileInfo = (SynFileInfo)o;
            m_SynFileInfo.LastTime = DateTime.Now;
            //再次new 避免WebClient不能I/O并发 
            WebClient client = new WebClient();
            if (m_SynFileInfo.Async)
            {
                //异步下载
                client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
                client.DownloadFileAsync(new Uri(m_SynFileInfo.DownPath), m_SynFileInfo.SavePath, m_SynFileInfo);
            }
            else client.DownloadFile(new Uri(m_SynFileInfo.DownPath), m_SynFileInfo.SavePath);
        }

        /// <summary>
        /// 下载进度条
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            SynFileInfo m_SynFileInfo = (SynFileInfo)e.UserState;
            m_SynFileInfo.SynProgress = e.ProgressPercentage + "%";
            double secondCount = (DateTime.Now - m_SynFileInfo.LastTime).TotalSeconds;
            m_SynFileInfo.SynSpeed = FileOperate.GetAutoSizeString(Convert.ToDouble(e.BytesReceived / secondCount), 2) + "/s";
            //更新DataGridView中相应数据显示下载进度
            m_SynFileInfo.RowObject.Cells["SynProgress"].Value = m_SynFileInfo.SynProgress;
            //更新DataGridView中相应数据显示下载速度(总进度的平均速度)
            m_SynFileInfo.RowObject.Cells["SynSpeed"].Value = m_SynFileInfo.SynSpeed;
        }

        /// <summary>
        /// 下载完成调用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            //到此则一个文件下载完毕
            SynFileInfo m_SynFileInfo = (SynFileInfo)e.UserState;
            m_SynFileInfoList.Remove(m_SynFileInfo);
            if (m_SynFileInfoList.Count <= 0)
            {
                //此时所有文件下载完毕
                btnStartDownLoad.Enabled = true;
            }
        }

        #endregion

        #region 需要下载文件实体类

        class SynFileInfo
        {
            public string DocID { get; set; }
            public string DocName { get; set; }
            public long FileSize { get; set; }
            public string SynSpeed { get; set; }
            public string SynProgress { get; set; }
            public string DownPath { get; set; }
            public string SavePath { get; set; }
            public DataGridViewRow RowObject { get; set; }
            public bool Async { get; set; }
            public DateTime LastTime { get; set; }

            public SynFileInfo(object[] objectArr)
            {
                int i = 0;
                DocID = objectArr[i].ToString(); i++;
                DocName = objectArr[i].ToString(); i++;
                FileSize = Convert.ToInt64(objectArr[i]); i++;
                SynSpeed = objectArr[i].ToString(); i++;
                SynProgress = objectArr[i].ToString(); i++;
                DownPath = objectArr[i].ToString(); i++;
                SavePath = objectArr[i].ToString(); i++;
                Async = Convert.ToBoolean(objectArr[i]); i++;
                RowObject = (DataGridViewRow)objectArr[i];
            }
        }

        #endregion

        #region 初始化GridView

        void InitDataGridView(DataGridView dgv)
        {
            dgv.AutoGenerateColumns = false;//是否自动创建列
            dgv.AllowUserToAddRows = false;//是否允许添加行(默认:true)
            dgv.AllowUserToDeleteRows = false;//是否允许删除行(默认:true)
            dgv.AllowUserToResizeColumns = false;//是否允许调整大小(默认:true)
            dgv.AllowUserToResizeRows = false;//是否允许调整行大小(默认:true)
            dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//列宽模式(当前填充)(默认:DataGridViewAutoSizeColumnsMode.None)
            dgv.BackgroundColor = System.Drawing.Color.White;//背景色(默认:ControlDark)
            dgv.BorderStyle = BorderStyle.Fixed3D;//边框样式(默认:BorderStyle.FixedSingle)
            dgv.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal;//单元格边框样式(默认:DataGridViewCellBorderStyle.Single)
            dgv.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None;//列表头样式(默认:DataGridViewHeaderBorderStyle.Single)
            dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;//是否允许调整列大小(默认:DataGridViewColumnHeadersHeightSizeMode.EnableResizing)
            dgv.ColumnHeadersHeight = 30;//列表头高度(默认:20)
            dgv.MultiSelect = false;//是否支持多选(默认:true)
            dgv.ReadOnly = true;//是否只读(默认:false)
            dgv.RowHeadersVisible = false;//行头是否显示(默认:true)
            dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//选择模式(默认:DataGridViewSelectionMode.CellSelect)
        }

        #endregion

        #region 文件相关操作类分

        /// <summary>
        /// 文件有关的操作类
        /// </summary>
        public class FileOperate
        {
            #region 相应单位转换常量

            private const double KBCount = 1024;
            private const double MBCount = KBCount * 1024;
            private const double GBCount = MBCount * 1024;
            private const double TBCount = GBCount * 1024;

            #endregion

            #region 获取适应大小

            /// <summary>
            /// 得到适应大小
            /// </summary>
            /// <param name="size">字节大小</param>
            /// <param name="roundCount">保留小数(位)</param>
            /// <returns></returns>
            public static string GetAutoSizeString(double size, int roundCount)
            {
                if (KBCount > size) return Math.Round(size, roundCount) + "B";
                else if (MBCount > size) return Math.Round(size / KBCount, roundCount) + "KB";
                else if (GBCount > size) return Math.Round(size / MBCount, roundCount) + "MB";
                else if (TBCount > size) return Math.Round(size / GBCount, roundCount) + "GB";
                else return Math.Round(size / TBCount, roundCount) + "TB";
            }

            #endregion
        }

        #endregion
    }
}

编排主机名

 

留神:主机名里不可能有下滑线,或许特殊字符#$,不然会找不到主机导致无法起动

到此批量下载效用完结得了,上面写的代码比较灵活,需求的恋人能够依据本身的项目修改有关内容。

那种措施改变主机名供给重启才能永远生效,因为主机名属于基本参数。

最终附上源码:WinBatchDownload.zip

若果不想重启,能够实施:hostname
hadoop01。可是那种改变是权且的,重启后会恢复生机原主机名。

作者:曾庆雷
出处:http://www.cnblogs.com/zengqinglei
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利

之所以能够组合使用。先修改配置文件,然后实施:hostname
hadoop01 。能够高达不重启或重启都以主机名都以同三个的指标

 澳门美高梅手机网站 2

2.配置hosts文件

施行:vim
/etc/hosts(192.168.161.41是自我本身机器的ip,那里不可不写入自个儿本机的ip)

澳门美高梅手机网站 3

3.配置免秘钥登录

在hadoop01节点执行(执行过hostname hadoop01):

执行:ssh-keygen

然后直接回车,直到出现类似的图纸:

 澳门美高梅手机网站 4

转变节点的公钥和私钥,生成的文本会自动放在/root/.ssh目录下

下一场把公钥发往远程机器,比如hadoop01向hadoop02发送

执行:**ssh-copy-id
root@hadoop01**

这时,hadoop02节点正是把接收的hadoop秘钥保存在

/root/.ssh/authorized_keys
那一个文件里,这一个文件也正是访问白名单,凡是在此白掌握存款和储蓄的 秘钥对应的机械,登录时皆避防密码登录的。

当hadoop01再次经过ssh远程登录hadoop02时,发现不需求输入密码了。

 澳门美高梅手机网站 5

在hadoop02节点执行上述上述手续,让hadoop02节点连接hadoop01免密码登录

4.配备自身节点登录的免密码登录

只假诺单机的伪分布式环境,节点须要报到本人节点,即hadoop01要登录hadoop01

然则此时是供给输入密码的,所以要在hadoop01节点上

举行:ssh-copy-id root@hadoop01(下边已经付诸)

5.设置和安顿jdk

1)安装jdk

mkdir /usr/local/src/java

rz 上传jdk tar包

tar -xvf jdk-7u51-linux-x64.tar.gz

布局环境变量

1:vi /etc/profile

2:在尾行添加

#set java environment

JAVA_HOME=/usr/local/src/java/jdk1.7.0_51

JAVA_BIN=/usr/local/src/java/jdk1.7.0_51/bin

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

保存退出

3:source /etc/profile 使更改的配备马上生效

4:java -version 查看JDK版本音信。如出示1.7.0注解成功。

执行: vi /etc/profile

2)在尾行添加

#set java environment

JAVA_HOME=/usr/local/src/java/jdk1.7.0_51

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOMEPATH CLASSPATH

保留退出

3)source /etc/profile 使更改的布局霎时生效

4)java -version 查看JDK版本新闻。如出示1.7.0认证成功。

6.上传和平化解压hadoop安装包

执行:tar -xvf hadoop……(包名)

目录表明:

bin目录:命令脚本

etc/hadoop:存放hadoop的铺排文件

lib目录:hadoop运营的依赖jar包

sbin目录:运维和关闭hadoop等一声令下都在那边

libexec目录:存放的也是hadoop命令,但一般不常用

最常用的就是bin和etc目录

7.配置hadoop-env.sh

以此文件里写的是hadoop的环境变量,首要修改hadoop的java_home路径

切换到 etc/hadoop(cd etc/hadoop)目录

执行:vim hadoop-env.sh

修改java_home路径和hadoop_conf_dir
路径(本人本机的装置目录)

澳门美高梅手机网站 6

然后实施:**source
hadoop-env.sh **让配置立刻生效

8.修改core-site.xml

在 etc/hadoop 目录下

执行:**vim core-site.xml**

配置如下:

 澳门美高梅手机网站 7

<configuration>

<!–用来内定hdfs的上边,namenode的地点–>

<property>

<name>fs.default.name</name>

<value>hdfs://hadoop01:9000<value>

</property>

<!–用来钦赐hadoop运转时爆发文书的寄放目录–>

<property>

<name>hadoop.tmp.dir</name>

<value>/usr/soft/hadoop-2.7.1/tmp</value>

</property>

</configuration>

9.修改vim hdfs-site .xml

铺排如下:

 澳门美高梅手机网站 8

<configuration>

<!–内定hdfs保存数据副本的数目,蕴涵本身,私下认可值是3–>

<!–倘使是伪分布形式,此值是1–>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

<!–设置 hdfs 的操作权限, false 代表别的用户都能够在 hdfs 上操作文件–>

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

</configuration>

10.修改vim mapred-site.xml

这一个文件开首时是未曾的,有的是模板文件,mapred-site.xml.template

从而必要拷贝一份,同样重视命名为mapred-site.xml

执行:**cp mapred-site.xml.template
mapred-site.xml**

布署如下:

澳门美高梅手机网站 9

<configuration>

<property>

<!–指定mapreduce运行在yarn上–>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

yarn是财富协调工具,

11.修改vim yarn-site.xml

配备如下:

 澳门美高梅手机网站 10

<configuration>

<!–Site specific YARN configuration
properties –>

<property>

<!–指定yarn的老大resoucemanager的地址–>

<name>yarn.resourcemanager.hostname</name>

<value>hadoop01</value>

</property>

<property>

<!–NodeManager获取数据的法子–>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

12.配置vim slaves文件

澳门美高梅手机网站 11

13.布局hadoop的条件变量 

配置代码:**vim /etc/profile**

澳门美高梅手机网站 12

HADOOP_HOME=/usr/soft/hadoop-2.7.1JAVA_HOME=/usr/local/src/java/jdk1.7.0_51

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export JAVA_HOME PATH CLASSPATH
HADOOP_HOME

14.格式化namenode

怎么要格式化?

执行:**hadoop namenode
-format**

要是倒霉使,可以重启linux

当出现:successfully,声明格式化成功

 澳门美高梅手机网站 13

15.启动Hadoop

cd hadoop-2.7.1/sbin (进入hadoop安装目录后举行)

./start-dfs.sh或者sh start-dfs.sh

16.停止Hadoop

./stop-dfs.sh 或者sh
stop-dfs.sh

注:假如在运行时,报错:Cannot find
configuration directory: /etc/hadoop

化解办法:

编辑etc/hadoop下的hadoop-env.sh 文件,添加如下配置消息:

澳门美高梅手机网站 14

export
HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop

然后实施source
hadoop-env.sh 使配置立即生效

执行:**start-yarn.sh** 运营yarn相关的劳务

在浏览器访问:

192.168.161.41:50070 来走访 hadoop 的管理页面(必须是团结本机的ip)

 

大家若感兴趣,转发本文,请评释出处

发表评论

电子邮件地址不会被公开。 必填项已用*标注