0基础搭建Hadoop大数额处理-集群安装澳门美高梅手机网站

经过一层层的先前时期条件准备,现在可以最先Hadoop的装置了,在此处去apache官网下载2.7.3的版本http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

作者:gregg
mojica,初稿链接,原文日期:2015-11-02
译者:pmst;校对:numbbbbb;定稿:numbbbbb

不需要下载最新的3.0本子,
与持续Hive最新版本有争执,不知底是不是温馨的打开形式不对。

上月在台北设立的苹果发布会中,苹果公司公布了第四代苹果电视机。可是,此次更新不同于以往其他版本,苹果新电视将同意用户从
App Store 下载使用和玩耍。

hadoop有二种运行模式:单机、伪分布式、完全分布式,本文介绍完全分布式。

这么的扬言的确给开发者打了一剂鸡血。新苹果电视中,位于
Cupertino(译者注:苹果电脑的五洲总公司所在地,位于美利坚联邦合众国新德里)的壮汉介绍了一个新的操作系统,有别于
iOS 系统,新系统名为 tvOS。tvOS 基于 iOS 开发,有少数改动。
我们将动用通用框架和您最喜爱编程语言(当然是 Swift喽,毫无疑问!)来编排多少个大概利用,先导明白 tvOS。

安装Hadoop

现在有多少个机械,一个Master H32,四个Slaver H33、H34。

将下载的收缩包上传到解压并活动至Master机器的相应目录。

将软件放置/usr/local目录下:

tar -zxvf hadoop-2.7.3.tar.gz

mv hadoop-2.7.3 hadoop273

image

创造hadoop用户组和用户

[root@H32 local]#groupadd hadoop #添加hadoop组[root@H32
local]#useradd -g hadoop hadoop -s /bin/false

将该hadoop文件夹的属主用户设为hadoop

sudo chown -R hadoop:hadoop /usr/local/hadoop273

布置文件此前先大体介绍一下hadoop2目录中的各种文件夹,注意区分与Hadoop1中的改变。

外层的开行脚本在sbin目录

内层的被调用脚本在bin目录

Native的so文件都在lib/native目录

配备程序文件都放置在libexec

部署文件都在etc目录,对应从前版本的conf目录

不无的jar包都在share/hadoop目录下面

创设Hadoop数据目录:

mkdir -p /usr/local/hadoop273/hdfs/name

mkdir-p /usr/local/hadoop273/hdfs/data

若不安排,Hadoop默认将数据存储在tmp文件夹中,重启会清空tmp数据,因而单独安排其数额存储文件夹,具体运用安排在底下XML中。

了解 tvOS

tvOS 基于 iOS 系统开发而成。你使用的浩大框架可能都适用于
tvOS。可是,苹果删除了多少个 iOS 框架,使得 tvOS 独一无二 (最出名的就是
Web基特)。

苹果帮忙两种档次的 tvOS
应用程序。第一个是观念的应用程序-这类应用程序会卷入代码和图纸等等资源。这差不多与
iOS 或 OS X 应用程序一样。tvOS
新增对client-server(客户端-服务器)接纳的支撑,即第两连串型。client-server应用程序简单地把服务器请求和网络支付过程集中到使用中来。换句话说,这一个应用可以同广大的数据库,服务器等互动。例如,假若您使用
Node.js(一款基于 Chrome V8 引擎开发的 JavaScript
框架)实现了后端,接着你可以考虑选择client-server技能,使它更易于管理应用程序(即我们的客户端)和后端(又称为服务器)。client-server应用程序可以直接与
JavaScript
举办相互。但是,由于这一个应用程序相比较特别,在本教程中我们将不研商client-server应用程序,重点介绍传统应用的开销。

请将这个概念牢记于心,先导我们的教程!

布置环境变量

/etc/profile 扩张如下内容:

export HADOOP_HOME=/usr/local/hadoop273

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

export HADOOP_MAPARED_HOME=${HADOOP_HOME}

export HADOOP_COMMON_HOME=${HADOOP_HOME}

export HADOOP_HDFS_HOME=${HADOOP_HOME}

export HADOOP_YARN_HOME=${HADOOP_HOME}

export YARN_HOME=${HADOOP_HOME}

export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export
LD_LIBRARY_PATH=${HADOOP_HOME}/lib/native/:$LD_LIBRARY_PATH

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS=”-Djava.library.path=$HADOOP_HOME/lib/native”

履行实施source /etc/profile,使之生效

修改slaves文件,添加子节点服务名或IP

$HADOOP_HOME/etc/hadoop/slaves (Master主机特有,子节点可以不加)

H33

H34

或写对应的IP

192.168.80.33

192.168.80.34

hadoop-env.sh中配置java_home

export JAVA_HOME=/usr/local/java/jdk1.8.0_101

让环境变量配置生效source

source /usr/local/hadoop3/etc/hadoop/hadoop-env.sh

Hadoop配置文件在conf目录下,在此以前的版本的布置文件重大是Hadoop-default.xml和Hadoop-site.xml。

由于Hadoop发展迅速,代码量急剧扩充,代码开发分为了core,hdfs和map/reduce三有些,配置文件也被分成了五个core-site.xml、hdfs-site.xml、mapred-site.xml。

core-site.xml和hdfs-site.xml是站在HDFS角度上部署文件;core-site.xml和mapred-site.xml是站在MapReduce角度上布置文件。

必备条件

在本教程中,我即便你早已明白科普的 iOS 框架、术语和网络文化。
我将在整个课程中应用 storyboard 举行教学,希望您了然哪些运用
storyboard。同样,我不会对 storyboard
中一些广大的操作做详细深刻地讲解(例如改变背景颜色,修改对象尺寸等等)。假诺你对
storyboard 还不太了解依旧还只是个 iOS 的初学者,我提出你去 AppCoda
教程网站先读书下,再回过头来学习本课程。

支付条件为 Xcode7.1
以上。当然最好仍旧在苹果电视机真机上拓展调剂(译者表示呵呵),当然模拟器也充足了。

core-site.xml配置如下(经过三番三遍坑最终能平稳跑的部署,说多了都是泪)

*
*

单独创立tmp文件夹hadoop_tmp 给 hadoop.tmp.dir 用于跟普通数据隔离。

创立一个新的 tvOS 工程

为了支付 tvOS 应用,你必须在你的 Mac 上设置 Xcode7.1。Xcode7.1 内置了
tvOS SDK,除此之外还有 iOS9.1 以及 斯维夫特(Swift)(Swift)2.1。

启动 Xcode,创立一个新工程,选中一个新的 tvOS 应用。在左侧面板,选中击
Single View Application 并点击 next。

image2

随着为新利用命名。对于首个应用来说,我们习惯以一个 Hello World App
作为教程的开端。命名该工程为
HelloWorld,接着点击创立并采用项目存储地方。

hdfs-site.xml

Hello, tvOS

鉴于 tvOS 继承自 iOS,许多您熟谙的 iOS 开发基本概念在 tvOS 中都适用。

在你的 Main.storyboard 文件中,添加一个 button,将 title 修改为“Click
Me!”,接着在其下方添加一个标签 label,如下所示:

image3

留意到 tvOS 中的按钮与 iOS
的按钮稍有例外。此外,当您添加多少个按钮时,苹果已经允许用户在按钮间无缝切换,比如向右,向左,向上或向下滑动。开发者只需要在
storyboard 中为按钮布局来采取该特性(稍后详述)。

和 iOS 一样,大家通过 control-drag 标签(label)和按钮(button)来创设IBOutlet 以及 IBAction。这里分别命名 outlet 为 myLabel,IBAction 为
buttonPressed。

在 buttonPressed 动作中,请键入如下代码行:

self.myLabel.text = "Hello,World"

您应当很了解这行代码了。假设你不熟练,上述代码实现了点击按钮,为标签(label)的
text 字段赋值”Hello,World”字符串值。

请在模拟器中运作应用。

您或许想要通过鼠标来点击按钮,但与模拟器中的 iOS
应用不同,苹果电视未配备触摸屏,仅仅看重一个遥控器罢了。因而,单击Hardware
>Show Apple 电视 Remote 或者 Command + Shift + R
急迅键突显遥控器。通过遥控器实现按钮的点击,你的率先个 tvOS
应用就此形成了!

mapred-site.xml

猜谜游戏 App

接下去,我们将拔取现有的 tvOS
知识开发一款简单的猜谜应用。这将是一个非常基本的猜谜应用(只有一个题材),那么些迷你项目重点是像你体现按钮和遥控器之间是什么样相互的。在接下去的类别中,大家将探索更多关于决定
tvOS 的学问。

双重启动 Xcode,依葫芦画瓢创造一个新的 tvOS
项目。然则请重新命名项目名称。

效仿我上面的布局做一些 storyboard 的功底操作。

设若您不确定自身是如何兑现的,上面是本身使用的机件的列表:

  1. 4 个 UIButton,尺寸为 960 X 325
  2. 1 个 UILabel,尺寸为 1400 X 120

随之为 4 个按钮添加 text 并转移它们的背景颜色,均在 storyboard 完成(任何
iOS 应用都足以这样实现)。

像以前一样,让我们将这些按钮绑定到代码中。为了代码简洁和容易精通,我将创设4 个 IBAction(虽然这并不一定是最优雅的化解方案,但它是最简便的)。

将这一个按钮逐一连接到 ViewController.swift 文件中(通过拖拉艺术开创
IBAction),暂且命名为 :button0Tapped、button1Tapped、button2Tapped 和
button3Tapped,你可以随时修改这一个名称。

上边图片中展现的 label
内容是探听加州的省城是哪位。给出五个选用供你挑选(有关加州京城的文化),答案是
Sacramento。其中 button1Pressed 动作响应 Sacramento 按钮的点击事件。

基于点击的按钮,我们想向用户显示一个警告信息,告知他们采取了科学如故错误的按钮。接着大家成立一个名为
showAlert 的函数来处理这件事,让大家的代码 DRY(DRY 是 Don’t Repeat
YourSelf
的缩写,对于软件工程师来说这是规矩用法,确保代码可重用性和可维护性)。

func showAlert(status: String, title:String) { // 1
        let alertController = UIAlertController(title: status, message: title, preferredStyle: .Alert) // 2
        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in //3 
        }
        alertController.addAction(cancelAction)

        let ok = UIAlertAction(title: "OK", style: .Default) { (action) in
        } // 4
        alertController.addAction(ok)

        self.presentViewController(alertController, animated: true) { // 5
        }
    }

上述函数接受五个参数,一个是用户的输入状态(表面他们回答问题的没错或者失实),以及警告提醒框中要突显的新闻或者标题。

其次行创设并初阶化一个新的 UIAlertController 对象。第三和第四行代码为
alert 警告框添加一个 cancel 撤除按钮和 ok
确认按钮,第五行代码用于呈现这个情节。

一旦您不确定这段代码是如何工作的,我强烈提出你先看看UIAlertController学科,这里提供了有关该类的详细信息。

方今,请在不同的 IBActions 中调用这么些措施。

@IBAction func button0Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
}
// 这是唯一正确的
@IBAction func button1Tapped(sender: AnyObject) {
    showAlert("Correct!", title: "Whoo! That is the correct response")
}
@IBAction func button2Tapped(sender: AnyObject) {
    showAlert("Wrong!", title: "Bummer, you got it wrong!")
}
@IBAction func button3Tapped(sender: AnyObject) {
    showAlert("Wrong!", title: "Bummer, you got it wrong!")
}

正如你所看到的,仅在 button1Tapped
函数中传唱“Correct”的题目,剩下都传出“Wrong”。

你的代码应该看起来和底下的代码一样。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func button0Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
    }
    @IBAction func button1Tapped(sender: AnyObject) {
        showAlert("Correct!", title: "Whoo! That is the correct response")
    }
    @IBAction func button2Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
    }
    @IBAction func button3Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
    }

    func showAlert(status: String, title:String) {
        let alertController = UIAlertController(title: status, message: title, preferredStyle: .Alert)

        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in

        }
        alertController.addAction(cancelAction)

        let ok = UIAlertAction(title: "OK", style: .Default) { (action) in
        }
        alertController.addAction(ok)

        self.presentViewController(alertController, animated: true) {
        }
    }
}

在模拟器中运作你的使用。假使一切顺利,你应当会看出类似下面的截图。

单机遥控器,选中 Cupertino 选项

你应有看到弹出一个 UIAlertController。

糟糕的是,模拟器并不扶助 swiping,因此你或许需要在真机中测试成功的 alert
警告框。不过,你可以在模拟器(遥控)中通过按住 option 键 swipe 选项。在
Apple 电视机 真机中,你可知在富有按钮中无缝切换。

恭喜! 你早就做到了第二个门类。

yarn-site.xml

瞩目褐色标志,要classpath一定是相对路径,不要用$HADOOP_HOME,运行会一直提醒找不到有关类错误,至此master节点的hadoop搭建完毕。

在 tvOS 中使用 TableViews

在 iOS 操作系统中,苹果大量应用
tableview。事实上,苹果在无数自身应用(包括新闻、联系人等)都使用了它。随着
watchOS SDK 的发表,tableview 可用于 Apple 沃特(Wat)ch
开发。自然地,新的苹果电视机和 tvOS 同样支撑这多少个流行的 API。

抄袭创制一个新的工程项目,命名为 TableViewPractice。

和原先开创的工程一律,Xcode 默认自动生成 ViewController.swift
文件。请在文件的第 11 行代码处添加如下宣示(译者注:就是让 ViewController
服从两个 tableView 的说道):

UITableViewDataSource, UITableViewDelegate

第 11 行的代码应该看起来如此:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

鉴于 斯威夫特(Swift) 是一门注重安全的语言,编译器会报告说并未如约 UITableView 的
Datasource 和 Delegate 协议。我们会很快解决这一个题材。

进而在 storyboard 中添加一个 tableView 视图并拖拽到 ViewController
文件中生成一个 IBOutlet,将其取名为 tableView。同时在这么些 IBOutlet
表明下方新增一个数组。

var dataArray = ["San Francisco", "San Diego", "Los Angeles", "San Jose", "Mountain View", "Sacramento"]

数组囊括了具备大家要在 tableView 突显的元素。

现行请在v iewDidLoad 方法的江湖添加如下代码:

// section数量
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}
// 每个section的cell数量    
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.dataArray.count
}
// 填充每个cell的内容    
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: .Subtitle, reuseIdentifier: nil)

    cell.textLabel?.text = "\(self.dataArray[indexPath.row])"
    cell.detailTextLabel?.text = "Hello from sub title \(indexPath.row + 1)"

    return cell
}

您恐怕发现了,tvOS 中的 tableview 和 iOS 中的 tableView
非常相像。在上头的代码片段中,大家报告 tableview
有些许行(rows),多少个部分(section),以及各样单元格要出示的情节。

在 viewDidLoad 方法中,确保您把 tableview 的 delegate 和 datasource
设置为自家 self。

self.tableView.dataSource = self
self.tableView.delegate = self

在模拟器中运作应用。

不出意外,你应有看到一个 tableview 出现在界面中。

现行,大家将在 tableView
的动手添加一个按钮(UIButton)。在模拟或者真机上构建并运行,Whoo
!我们现在可以在按钮和 tableview 之间无缝切换了。

搭建剩余节点

明天在Master机器上的Hadoop配置就停止了,剩下的就是安排Slave机器上的Hadoop。


Master上配置好的hadoop所在文书夹”/usr/local/hadoop273″复制到所有的Slave的”/usr/local”目录下(实际上Slave机器上的slavers文件是不必要的,
复制了也没问题)。用下边发号施令格式举行。(备注:此时用户可以为hadoop也足以为root)

把H32的hadoop目录下的logs和tmp删除,再把H32中的jdk、hadoop文件夹复制到H33和H34节点

scp -r /usr/local/hadoop273 root@H33:/usr/local

譬如:从”Master.Hadoop”到”Slave1.Hadoop”复制配置Hadoop的文件。

上图中以root用户进行复制,当然不管是用户root如故hadoop,尽管Master机器上的”/usr/local/hadoop273″文件夹用户hadoop有权力,不过Slave1上的hadoop用户却绝非”/usr/local”权限,所以没有创设文件夹的权位。所以无论是哪个用户举办拷贝,右面都是”root@机器IP”格式。因为大家只是建立起了hadoop用户的SSH无密码连接,所以用root举办”scp”时,扔提醒让您输入”Slave1.Hadoop”服务器用户root的密码。

翻看”Slave1.Hadoop”服务器的”/usr/local”目录下是否曾经存在”hadoop”文件夹,确认已经复制成功。

hadoop文件夹确实已经复制了,然而我们发现hadoop权限是root,所以我们前些天要给”Slave1.Hadoop”服务器上的用户hadoop添加对”/usr/local/hadoop”读权限。

如上配置完成后,将hadoop整个文件夹复制到其他机器。

始建一个气候 App

在下一个小品种中,大家将支付一个概括的气象应用程序,显示当前的天气预报。在这多少个项目中,我们将运用相当安静的气候
API:forecast.io,它为包括 Dark Sky 在内许多 iOS 应用提供 API 帮助。

首先你需要在 developer.forecast.io
注册一个开发者账号。我们只是测试,免费的 API 调用(1000
次/天)应该充分使用了。

留神上面 url:
https://api.forecast.io/forecast/d3250bf407f0579c8355cd39cdd4f9e1/37.7833,122.4167

forecast/而后的一串数字(即 d3250bf40…)是 API Key
键值(千万不要将品种的 API Key 透露给外人);紧跟着 API Key
字符串后的是您想要解析天气数据地点的经度和纬度坐标。我选取 San
Francisco,可是你可以经过简单修改经纬坐标值来突显任何地方的天气。

一旦在浏览器中开辟该链接,你将注意到上报数据为 JSON 格式。这是一个
Get请求。在 HTTP 世界中,GET 用于获取和下载数据。

为了领悟数据并将其出示到应用中,大家需要分析它。解析 JSON 在 斯维夫特(Swift)中一向是一个热议话题。近期有各样各类的 JSON 解析库,诸如
Swift(Swift)yJSON、Alamofire
等。它们都是很棒的资源,我强烈提出你先看看。但是,在本教程中大家将采纳NSJSONSerialization,一个 iOS 内置的类。首先,打开 ViewController.swift
文件。didRecieveMemory提个醒函数在本项目中从未存在的意思,所以删除它吧!

现今,在 ViewDidLoad 中键入如下代码:

if let url = NSURL(string: "https://api.forecast.io/forecast/d3250bf407f0579c8355cd39cdd4f9e1/37.7833,122.4167") { }

此间我们拔取可选类型讲明一个 url 变量。

NSJSONSerialization 需要传入 NSData 举行解析。

if let data = NSData(contentsOfURL: url){ }

跟着,在上头 data 花括号效率域中键入如下代码:

do {
      let parsed = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) // 1

     let newDict = parsed as? NSDictionary // 2
     print(newDict!["currently"]!["summary"])
   }
catch let error as NSError {
     print("A JSON parsing error occurred, here are the details:\n \(error)") // 3
}

大家把 NSJSONSerialization 对象包裹在 do-catch 语句中。你可能对 do
语句不太明白,那是 斯维夫特(Swift)(Swift) 2 中的新特征。Do-Catch
语句是一个新的立异性错误处理机制。Do-Catch 语句的应用方法如下:

do {
    try expression // 不是必要的内容
    statements
} catch pattern 1 {
    statements
} catch pattern 2 where condition {
    statements
}

在首先行代码中,大家设定了一个 NSJSONSerialization 对象,并传播 data
对象。注意,对象(parsed)在选取在此之前必须先转换成一个 NSDictionary 字典。

随即,在其次行代码中,我们指定一个名为 newDict
的变量并运用as第一字将其更换 NSDictionary。

说到底,在第三行代码中,大家捕获任何不当并打印到顶点中。

您的方方面面 ViewController 文件应当接近于下边的代码。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let url = NSURL(string: "https://api.forecast.io/forecast/d3250bf407f0579c8355cd39cdd4f9e1/37.7833,122.4167") {
            if let data = NSData(contentsOfURL: url){
                do {
                    let parsed = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments)

                    let newDict = parsed as? NSDictionary
                    print(newDict!["currently"]!["summary"])
                }
                catch let error as NSError {
                    print("A JSON parsithng error occurred, here are the details:\n \(error)")
                }
            }
        }
    }
}

检查终端输出。你应当看到一个包装了值的可选类型(你拿走的值应该稍有不同,会遵照不同的地理地点和气象来显示)。

目前大家将一部分 UILabel 链接到应用中。拖拽五个 UILabel,一个叫
currentTemp,另一个叫 currentSummary。仔细看下 forecast 的
API,你会小心到它回到当今日气温度以及气象的概貌(当然还有其余数据)。

在 newDict 变量下面放置如下代码:

self.currentTemp.text = "\(newDict!["currently"]!["temperature"]!!)"
self.currentSummary.text = "\(newDict!["currently"]!["summary"]!!)"

代码实现了收获天气数据并科学显示到界面。每一行语句最终都应用了再一次叹号符号(!!),用于强制解包
JSON 数据(否则它将被包裹到 Optional 中)。

在模拟器中构建并运行。

干的科学!你已经成功了天气预报项目!

启动hadoop

其他 tvOS 特性

咱俩只不过接触了点 tvOS 的肤浅。正如你所知道的,tvOS 建立在各个 iOS API
之上。不过,许多框架已经从 tvOS
中移除了。完整列表请看这篇文章

除了,tvOS
的根基是问题事件(按钮、单元格、标签等在当选状态时会彰显出来,此时为聚焦状态)。幸运的是,系统活动处理大多数聚焦事件。只要您利用了
storyboard,默认会自动聚焦。你可以在Google中找到一些聚焦API

正如教程先导所涉及的,苹果帮忙 client-server 应用。这个应用使用
电视ML、电视机JS 以及 电视ML基特,它们的基础是即时不过盛行的 web
技术(HTML、JavaScript 等)。

时下内需考虑的最大挑衅是创建的 tvOS 应用中,SDK
并不帮助数据持久化存储。这是和 iOS 不同,你无法保存任何大小超过 1MB
的相片、图标等情节。由此你必须配备一个后端服务,如
Cloud基特、Parse、iCloud 等。指出你先明白下 tvOS
中对资源的急需(从前我写的App
瘦包教程
)。其它,应用大小限制在
200MB 以内。

显著,tvOS 应用中有太多限制标准,大家需要多加小心。

1.格式化namenode

hdfs namenode -format 只需四回,下次初阶不再需要格式化,只需
start-all.sh

若没有安装路径$HADOOP_HOME/bin为环境变量,则需在$HADOOP_HOME路径下执行

bin/hdfs namenode -format

总结

在本教程中咱们大致领会了 tvOS
以及它的各样特色。通过多少个例子项目我们看到了 tvOS
的精锐之处,当然还有局限性。tvOS 与 iOS
共享许多相似之处,但局部iOS框架却一度被移除了。

这里提供了完全的档次文件。

在品种一中,大家贯彻了一个 hello,world
应用程序;随后项目二中落实了简要的猜谜游戏使用,向您来得聚焦引擎;项目三详尽介绍了在
tvOS 中哪些使用
tableView;最后,咱们构成已有知识在类型四中构建了一个概括的气象应用程序,可以从互联网上下载天气数据。

苹果的 tvOS 应用商店于下一周推出,授权世界各地的开发者分享他们的作品。

您将作为见证者,看到 tvOS 和新的苹果电视机永久性地改变 电视机 行业!

正文由 Swift(Swift)GG 翻译组翻译,已经收获作者翻译授权,最新篇章请访问
http://swift.gg

2.启动dfs及yarn

start-dfs.sh
在开行前关闭集群中保有机器的防火墙,不然会冒出datanode开后又自行关闭(暂未发现)
service iptables stop

start-yarn.sh

若没有设置路径$HADOOP_HOME/sbin为环境变量,则需在$HADOOP_HOME路径下执行

sbin/start-dfs.sh

sbin/start-yarn.sh

或 直接start-all.sh都启动

除此以外还要启动history服务,不然在面板中不能够打开history链接。

sbin/mr-jobhistory-daemon.sh start historyserver

停下集群

sbin/stop-dfs.sh

sbin/stop-yarn.sh

或 直接stop-all.sh

下面采纳jps命令查看启动进程:

4504 ResourceManager

4066 DataNode

4761 NodeManager

5068 JobHistoryServer

4357 SecondaryNameNode

3833 NameNode

5127 Jps

打开监控页面

近来便得以打开页面http://192.168.80.32:8088及http://192.168.80.32:50070;看到下面两个页面时说明安装成功。

测试

hdfs测试:

在root中开创文件:

~/hadoop-test-data.txt

向hdfs中上传文书:

bin/hadoop fs -put ~/hadoop-test-data.txt /tmp/input

查看hdfs文件目录:

hdfs dfs –ls /

移除文件命令:

hadoop fs -rm -r /tmp/input

Yarn测试:

运行WordCount测试程序,output为出口文件。

bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount
/tmp/input output

运作过程出现下边内容,没有不当提醒表达正常:

切实查看结果:

查阅生成列表,会有五个文本,重要查看part-r-00000

hadoop fs -ls output/

hadoop fs -cat output/part-r-00000

结果突显:

hadoop 1

hello 2

java 4

jsp 1

到这里,hadoop-2环境搭建完毕,配置文件遵照实际需求,具体配置。

查阅集群状态:

[root@H32 hadoop273]$ ./bin/hdfs dfsadmin -report

MapReduce Application Master界面:

Map Task运行情况:

某个Node上各个Container状态:

扩展

以下列布署过程中遇见的几个大规模问题,加了网上一些网友的内容。

解决”no datanode to stop”问题

当截止Hadoop时发现如下音讯:

原因:每一次namenode
format会重新创造一个namenodeId,而tmp/dfs/data下富含了上次format下的id,namenode
format清空了namenode下的数码,但是尚未清空datanode下的数额,导致启动时败北,所要做的就是每便fotmat前,清空tmp一下的享有目录。

首先种缓解方案如下:

1)先删除”/usr/hadoop/tmp”

rm -rf /usr/hadoop/tmp

2)创建”/usr/hadoop/tmp”文件夹

mkdir /usr/hadoop/tmp

3)删除”/tmp”下以”hadoop”起始文件

rm -rf /tmp/hadoop*

4)重新格式化hadoop

hadoop namenode -format

5)启动hadoop

start-all.sh

行使第一种方案,有种糟糕处就是原本集群上的首要数据全没有了。假设说Hadoop集群已经运行了一段时间。提议选拔第两种。

其次种方案如下:

1)修改每个Slave的namespaceID使其与Master的namespaceID一致。

或者

2)修改Master的namespaceID使其与Slave的namespaceID一致。

该”namespaceID”位于”/usr/hadoop/tmp/dfs/data/current/VERSION”文件中,前边红色的或是基于实际情形变化,但前面绿色是不变的。

例如:查看”Master”下的”VERSION”文件

自我指出利用第二种,这样方便神速,而且仍能防范误删。

Slave服务器中datanode启动后又自行关闭

翻开日志发下如下错误。

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:
java.io.IOException: Call to … failed on local exception:
java.net.NoRouteToHostException: No route to host

解决方案是:关闭防火墙

service iptables stop

从本土往hdfs文件系统上传文件

并发如下错误:

INFO hdfs.DFSClient: Exception in createBlockOutputStream
java.io.IOException: Bad connect ack with firstBadLink

INFO hdfs.DFSClient: Abandoning block blk_-1300529705803292651_37023

WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unable
to create new block.

解决方案是:

1)关闭防火墙

service iptables stop

2)禁用selinux

编辑 “/etc/selinux/config”文件,设置”SELINUX=disabled”

处理速度特其余慢

并发map很快,然则reduce很慢,而且往往现身”reduce=0%”。

缓解方案如下:

结缘解决方案5.7,然后修改”conf/hadoop-env.sh”中的”export
HADOOP_HEAPSIZE=4000″

解决hadoop OutOfMemoryError问题

出现这种特别,显明是jvm内存不够得原因。

缓解方案如下:要修改所有的datanode的jvm内存大小。

Java –Xms 1024m -Xmx 4096m

诚如jvm的最大内存使用相应为总内存大小的一半,我们运用的8G内存,所以设置为4096m,这一值可能依旧不是最优的值。

Namenode in safe mode

解决方案如下:

bin/hadoop dfsadmin -safemode leave

IO写操作出现问题

0-1246359584298, infoPort=50075, ipcPort=50020):Got exception while
serving blk_-5911099437886836280_1292 to /172.16.100.165:

java.net.SocketTimeoutException: 480000 millis timeout while waiting for
channel to be ready for write. ch :
java.nio.channels.SocketChannel[connected local=/

172.16.100.165:50010 remote=/172.16.100.165:50930]

at
org.apache.hadoop.net.SocketIOWithTimeout.waitForIO(SocketIOWithTimeout.java:185)

at
org.apache.hadoop.net.SocketOutputStream.waitForWritable(SocketOutputStream.java:159)

……

It seems there are many reasons that it can timeout, the example given
in HADOOP-3831 is a slow reading client.

缓解方案如下:

在hadoop-site.xml中设置dfs.datanode.socket.write.timeout=0

java.net.NoRouteToHostException: No Route to Host from H32/192.168.80.32
to H30:40080 failed on socket timeout exception:
java.net.NoRouteToHostException: 没有到主机的路由;

闭馆to H30的防火墙,或无法访问H30服务器,重启H30

This token is expired. current time is 1489243761235 found 1489239661109

Note: System times on machines may be out of sync. Check system time and
time zones.

五个主机的光阴不同等,重置五个主机的时光,重置方法网上有许多。

启航hadoop时未尝NameNode的或许原因:

(1) NameNode没有格式化

(2) 环境变量配置错误

(3) Ip和hostname绑定战败

(4)hostname含有特殊符号如何.(符号点),会被误解析

地点占用

报错:org.apache.hadoop.hdfs.server.namenode.NameNode: Address already
in use

缓解形式:查找被占用的端口号对应的PID:netstat –tunl

Pkill -9 PID

实质上不行就killall -9 java

相关文章

发表评论

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