Hadoop学习笔记1-什么样简单布署hadoop

信用社机型配备:

原文链接=http://www.appcoda.com/tvos-introduction/
作者=gregg mojica
原稿日期=2015/11/02
译者=pmst
校对=numbbbbb
定稿=numbbbbb

选型标准:普通的,廉价的,标准的(容易替换的),工业化大规模生产的

上月在圣地亚哥开办的苹果发布会中,苹果公司发布了第四代苹果电视机。不过,此次更新不同于以往其他版本,苹果新电视将允许用户从
App Store 下载应用和游玩。

CPU:补助多核CPU,如2个4核CPU

诸如此类的注脚的确给开发者打了一剂鸡血。新苹果电视机中,位于
Cupertino(译者注:苹果电脑的大千世界总集团所在地,位于美利坚合众国台北)的巨人介绍了一个新的操作系统,有别于
iOS 系统,新系列名为 tvOS。tvOS 基于 iOS 开发,有零星改动。
我们将运用通用框架和您最欢喜编程语言(当然是 斯威夫特喽,毫无疑问!)来编排多少个简单利用,开首询问 tvOS。

内存:16G之上,内存越大,常用数据都缓存在内存,提升速度

澳门美高梅手机网站,image

硬盘:不需RAID,也不需使用SCSI、SAS、SSD硬盘,只需普通SATA硬盘即可,只要容量充足。

了解 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应用程序,重点介绍传统应用的支出。

请将这一个概念牢记于心,起初大家的学科!

网络:提议千兆网和高带宽交流机,hadoop对各节点服务器的数码通讯量极为首要。Infinband可以毫无考虑。

必备条件

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

付出环境为 Xcode7.1
以上。当然最好依旧在苹果电视真机上开展调试(译者表示呵呵),当然模拟器也丰硕了。

 

创设一个新的 tvOS 工程

为了支付 tvOS 应用,你无法不在您的 Mac 上安装 Xcode7.1。Xcode7.1 内置了
tvOS SDK,除此之外还有 iOS9.1 以及 斯维夫特2.1。

启航 Xcode,成立一个新工程,选中一个新的 tvOS 应用。在右手面板,选中击
Single View Application 并点击 next。

image2

随之为新应用命名。对于第一个利用来说,我们习惯以一个 Hello World App
作为教程的发端。命名该工程为
HelloWorld,接着点击成立并拔取品种存储地方。

网络拓扑设计:

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
应用就此形成了!

行使局域网布署,尽量不行使低速率的跨数据大旨连续。

猜谜游戏 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 电视 真机中,你可知在享有按钮中无缝切换。

恭贺! 你早已完成了第二个类型。

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 之间无缝切换了。

澳门美高梅手机网站 1

创办一个气候 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) 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 中)。

在模拟器中构建并运行。

干的不利!你曾经做到了天气预报项目!

 

其他 tvOS 特性

大家只不过接触了点 tvOS 的肤浅。正如您所领会的,tvOS 建立在各类 iOS API
之上。然而,许多框架已经从 tvOS
中移除了。完整列表请看那篇文章

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

正如教程开端所波及的,苹果帮忙 client-server 应用。这一个应用使用
电视ML、电视机JS 以及 电视机ML基特(Kit),它们的底蕴是随即最好盛行的 web
技术(HTML、JavaScript 等)。

此时此刻亟需考虑的最大挑衅是开创的 tvOS 应用中,SDK
并不襄助数据持久化存储。这是和 iOS 不同,你无法保留任何大小领先 1MB
的肖像、图标等情节。因而你必须安排一个后端服务,如
Cloud基特、Parse、iCloud 等。提出您先明白下 tvOS
中对资源的要求(以前自己写的App
瘦包教程
)。其余,应用大小限制在
200MB 以内。

大庭广众,tvOS 应用中有太多限制条件,大家需要多加小心。

 

总结

在本教程中我们大概精通了 tvOS
以及它的各类风味。通过五个例证项目我们看出了 tvOS
的雄强之处,当然还有局限性。tvOS 与 iOS
共享许多相似之处,但部分iOS框架却已经被移除了。

这里提供了完整的类型文件。

在品种一中,我们落实了一个 hello,world
应用程序;随后项目二中实现了简单的猜谜游戏采纳,向您来得聚焦引擎;项目三详实介绍了在
tvOS 中如何利用
tableView;最终,大家构成已有学问在类型四中构建了一个简短的天气应用程序,可以从互联网上下载天气数据。

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

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

操作系统采用:

主流操作系统:Linux,只假设风靡版即可,例:CentOs,
Unbuntu, Redhat等。

window下需要cygwin,但或许现身意料不到的问题。

不区分32/64位数,基于Java环境。

 

 

试验布署环境:

伪分布情势:在单机环境下同时开动namenode,datanode,jobtracker,tasktracker,
secondary namenode等三个经过,即四个节点都效仿运行在一台机下。

一齐分布情势:正常的hadoop集群,由五个各司其职的节点构成。

 

以CentOs虚拟机为例:

可使用默认分区,CLI界面即可。

亟待安装ssh,vi,java最新版。

瞩目需要将iptables,
selinux等防火墙关闭。

 

配置工作:

  1. 配置hosts文件:
在各节点的系统内设置好各节点的IP和对应的主机名,文件位置:/etc/hosts。



以此步骤以便各节点能根据主机名称找到该机器以便通讯,防止局域网IP可能某些原因而变化导致找不到相应机器而通讯失败。


 

 此步骤应最先设置好。


 
  1. 确立hadoop运行的帐号。

 

  1. 布局免密码ssh:

急需转变密钥复制到各节点中,使各节点之间达成ssh的免密码连接。

注意:

  1. 密钥文件的权限数为644,即rw-r—r—

  2. 各节点的密钥也要复制一份给自身,达到ssh免密码连接访问自身。

 

CentOs
6默认安装了ssh,只需确认sshd服务是否自启动即可。ssh需要手动安装:yum
install openssh-clients。

免密码方法设置:http://www.cnblogs.com/xiwang6428/p/3451711.html

 

  1. 下载解压或设置hadoop安装包。
一般是下载tar.gz压缩包,可解压在用户的家目录下。


 
  1. 安排hadoop相关文书:(以1.2版为例,位于hadoop目录/conf/)

文件名

格式

描述

修改配置

hadoop-env.sh

bash脚本

运行hadoop所需的环境变量

设置export JAVA_HOME=java的安装目录

core-site.xml

xml配置文件

配置hadoop核心设置,如HDFS和MadReduce的I/O设置

在<configuration>节点间加入:

<property>

    <name>fs.default.name</name> #指定namenode名称节点

    <value>hdfs://namenode主机名:9000</value>

</property>

<property>

    <name>hadoop.tmp.dir</name> #指定hadoop的临时目录,如果不设定会默认以/tmp为临时目录。该目录会自动清空,所以不要用。

    <value>/home/hadoop运行的用户帐号/hadoop/tmp</value>

</property>

hdfs-site.xml

xml配置文件

配置HDFS守护进程:namenode,secondary namenode和datanode。

在configuration节点添加:

<property>

    <name>dfs.replication</name> #指定数据复制份数,一般来说有几个数据节点就复制几份

    <value>2</value>

</property>

mapred-site.xml

xml配置文件

配置mapreduce进程:jobtracker和tasktracker

在configuration节点添加:

<property>

    <name>mapred.job.tracker</name> #设定jabtracker的监听地址和端口

    <value>namenode主机名:9001</value>

</property>

masters

文本文件

运行主要的次要的namenode的主机名列表(每行一个)

每行添加一个主机名

slaves

文本文件

运行datanode和tasktracker的主机名列表(每行一个)

每行添加一个主机名

 

  1. 将配置好的hadoop目录分发复制到各节点的主机内。
因为各机的配置都相同,所以直接复制过去即可。

    例:scp –r ./hadoop
目标主机名:/home/用户名

 

  1. 格式化分布式文件系统:
在namenode主机的hadoop目录下,执行
bin/hadoop namenode –format 

并发一堆音信,如成功有提示:has been successfully formatted.

  1. 起步守护进程:

    在namenode主机的hadoop目录下,执行
    bin/start-all.sh

    有关的起步音讯会记录在各节点主机的
    hadoop目录/logs下。

 

  1. 检测守护进程启动状态
/usr/java/jdk1.6.0\_26/jps
\#假设此为java安装目录 

 

 

发表评论

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