分类 树莓派 下的文章

Calibre 电子书管理软件可以轻松地在树莓派 3 上设置电子书服务器,即使在连接较慢区域也是如此。

 title=

最近 Calibre 3.0 发布了,它让用户能够在浏览器中阅读电子书!注意 Raspbian 的仓库还没有更新它(截至写作时)。

电子书是教师、图书馆员和其他人与学生共享书籍、课堂资料或其他文件的好方法,只需要你有可靠的带宽接入即可。但是,即使你的连接速度较慢或无法连接,还有一个简单的解决方案:使用在树莓派 3 上运行的开源 Calibre 电子书管理软件创建电子书服务器。这是我所做的,你也可以。

首先我下载了最新的 Raspbian Pixel 镜像,并安装在一个新的 8GB microSD 卡上。然后我插入 microSD,连接了键盘、鼠标并用一根 HDMI 线连接到一台旧的 LCD 电视,然后启动了 Pi。在我的显示器上调整了 Pixel 环境分辨率并连接到本地网络之后,我准备开始了。我打开一个终端,并输入 sudo apt-get update 以获取操作系统的最新更新。

 title=

接下来,我在终端中输入 sudo apt-get install calibre 来安装 Calibre

 title=

我从命令行启动了 Calibre(注意它也可以从 GUI 启动)。Calibre 的界面非常直观。第一次启动时,你会看到 Welcome to Calibre 的向导。我将默认 “Calibre Library” 更改为 “CalibreLibrary”(一个词),因为这启动内容服务器时更容易。

在选择完我的 Calibre 内容位置后,我准备好开始下载书了。

 title=

我从菜单中选择了 Get Books 选项,在这很容易输入我的搜索字词,并选择我感兴趣的电子书提供者。我正在寻找非 DRM 的材料,所以我选择 Project Gutenberg 作为我的源。(Caliber 的免责声明指出,电子书交易是在你和个人内容提供商之间。)我在作者字段中输入 “Mark Twain”,并得到10个结果。

 title=

我选择了 Adventures of Huckleberry Finn 这本书。在下一页面上,我可以选择 MOBIEPUB 这两种电子书格式。我选择了 EPUB,这本书下载得很快。

 title=

你也可以从其他内容提供商向库中添加图书,而不是在 Calibre 的列表中添加图书。例如,老师可以通过该内容服务器与学生分享电子书格式的开放教育资源。要加载内容,请使用界面最左侧的 “Add Books” 选项。

根据你图书库的大小,你也许需要增加 microSD 卡的大小。

start_the_server.png

将内容添加到电子书服务器后,即可与网络中的其他人共享内容。通过在终端中输入 ifconfig 获取你的树莓派 IP 地址。我正在使用无线网络,所以我在下面的例子中使用了 wlan0 中的结果。点击界面的最右侧并展开菜单。然后点击 “Connect and Share” 并启动服务器。

 title=

我下一步是通过我的电脑客户端连接到树莓派访问我添加的电子书。我在客户端上打开一个浏览器并输入树莓的地址,后面加上 :8080 端口。在我这里是 http://192.168.1.10:8080 (根据你 Pi 的地址来适配)。

你会在浏览器中看到主页:

 title=

我已经测试,并能用 iPhone、Linux、MacOS 计算机轻易连接到服务器。

你可以在这个主页总探索选项,或者点击 All Books 显示服务器上的所有内容。

 title=

从这里,你可以下载书到你的设备并离线阅读了。

你还没有设置一台电子书服务器么?或者你考虑自己设置一台么?在评论中分享你的建议或者问题。


作者简介:

Don Watkins - 教育家、教育技术专家、企业家、开源倡导者。教育心理学硕士、教育领导硕士、Linux 系统管理员、CCNA、使用 Virtual Box 虚拟化。关注我 @Don\_Watkins。


via: https://opensource.com/article/17/6/raspberrypi-ebook-server

作者:Don Watkins 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

编辑:在写完这个这篇文章之后,我在树莓派 3 上基于 Debian 开始打造 64 位的系统。你可以在这里找到

树莓派 3 配有 Broadcom BCM2837 64 位 ARMv8 四核 Cortex A53 处理器,它是一个 64 位 CPU。如果你有一块,运行以下命令可能会让你感到惊讶:

uname -a
Linux raspberrypi 4.4.34-v7+ #930 SMP Wed Nov 23 15:20:41 GMT 2016 armv7l GNU/Linux

是的,这是一个 32 位内核。这是因为树莓派基金会还没有为官方的树莓派系统 Raspbian 提供 64 位版本。然而你可以构建一个,多亏了 Electron752 提供的许多补丁。

构建内核

树莓派基金会维护着它们自己的 Linux 内核分支,它为它们的设备特别裁剪过,同时定期地从上游合并。

我们将会遵照这个页面的指导来构建一个 64 位内核

我们不能使用“本地构建”的方法,因为它需要一块 64 位的树莓派,这个我们明显还没有。因此我们需要交叉编译它,Ubuntu 是推荐的系统。我个人没有 Ubuntu,因此我在一个有 2 个 CPU 的 Ubuntu 16.04 Digital Ocean 实例上构建,这应该花费我 $0.03。如果你也想这么做,你可以通过[这个链接](https://m.do.co/c/8ef9c5832a9c)得到 $10 的免费额度。或者你可以通过使用 Virtualbox 中的 Ubuntu VM 作为实例。

首先,我们需要一些构建工具以及** aarch64 交叉编译器**:

apt-get update
apt-get install -y bc build-essential gcc-aarch64-linux-gnu git unzip

接着我们可以下载 Linux 内核源码

git clone –depth=1 -b rpi-4.8.y https://github.com/raspberrypi/linux.git

进入到创建的 git 目录。另外你可以为你的内核添加额外的版本标签,可以通过编辑 Makefile 的开始几行完成:

VERSION = 4
PATCHLEVEL = 8
SUBLEVEL = 13
EXTRAVERSION = +bilal

为了构建它,运行下面的命令:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
make -j 3 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

第一个应该很快。第二个则会完全不同,我没有精确计时,但是对我来说大概要半个小时。根据你的 CPU 数(nproc * 1.5)调整 -j 标志。

选择一个 Linux 发行版

在内核编译的时候,我们可以开始准备它的 Linux 发行版了。在本教程中为了简单我使用 Raspbian,即使这是一个只有 32 位的发行版。

如果你想要一直用 64 位系统,你应该选一个有 aarch64 支持的发行版,Debian 有一个健壮的 ARM64 移植版。得到它基本有三种方式:

  • 下载一个预构建的根文件系统,这很可能会如页面中提到的那样给你一个过期的版本。
  • 如果你熟悉 debootstrap,用它构建你自己的(这回比较棘手,因为它需要一些手工调整,它最初的目的是在已经运行的主机上进行 chroot,而不是为其他机器构建根文件系统)
  • 我建议使用 multistrap,这里有一个很好的教程:http://free-electrons.com/blog/embdebian-with-multistrap/

回到 Raspbian,我们现在可以下载官方系统,并开始准备了。

打开一个新的 shell 会话并运行下面的命令:

wget -O raspbian.zip https://downloads.raspberrypi.org/raspbian_lite_latest
unzip raspbian.zip

我们用下面的命令审查:

fdisk -l 2016-11-25-raspbian-jessie-lite.img
Disk 2016-11-25-raspbian-jessie-lite.img: 1.3 GiB, 1390411776 bytes, 2715648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x244b8248

Device Boot Start End Sectors Size Id Type
2016-11-25-raspbian-jessie-lite.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
2016-11-25-raspbian-jessie-lite.img2 137216 2715647 2578432 1.2G 83 Linux

我们可以看到它有两个分区。第一个是启动分区,它主要包含了 bootloader、Linux 内核以及少量配置文件。第二个是根分区

我们可以在我们的文件系统上挂载这些分区,从根分区开始:

mount -o loop,offset=70254592 2016-11-25-raspbian-jessie-lite.img /mnt

offset 取决于扇区大小(512):70254592 = 512 * 137216

接着是启动分区

mount -o loop,offset=4194304,sizelimit=66060288 2016-11-25-raspbian-jessie-lite.img /mnt/boot

offset :4194304 = 512 * 8192,sizelimit:66060288 = 512 * 129024 。

树莓派系统现在应该可以在 /mnt 中看到了。我们基本要完成了。

打包内核

内核编译完成后,最后一步包括复制 Linux 内核以及设备树到启动分区中:

cp arch/arm64/boot/Image /mnt/boot/kernel8.img
cp arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb /mnt/boot/

调整 config.txt :

echo “kernel=kernel8.img” >> /mnt/boot/config.txt

安装内核模块 :

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu INSTALL_MOD_PATH=/mnt modules_install
umount /mnt/boot
umount /mnt

就是这样了,用于树莓派 3 的** ARM64 Linux 内核**诞生了!

现在你可以压缩镜像,通过 scp 下载下来,并按照标准的步骤放到你的 SD 卡中。

最后你会得到:

uname -a
Linux raspberrypi 4.8.13+bilal-v8+ #1 SMP Wed Dec 14 14:09:38 UTC 2016 aarch64 GNU/Linux

via: https://devsidestory.com/build-a-64-bit-kernel-for-your-raspberry-pi-3/

作者:Bilal Amarni 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

学习如何用 PHP 和温度传感器实现树莓派控制 GPIO 并操作继电器

 title=

你是否曾经想知道怎样使用手机或者电脑在任何地方控制你的风扇和灯等一些家用电器?

我现在想控制我的圣诞彩灯,是使用手机呢,还是使用平板电脑呢,或者是使用笔记本电脑呢?都不是,而是仅仅使用一个树莓派。让我来告诉你如何使用 PHP 和温度传感器实现树莓派控制 GPIO 引脚并操作继电器。我使用 AJAX 把它们整合在了一起。

硬件要求:

  • 树莓派
  • 安装有 Raspbian 系统的 SD 卡(任何一张 SD 卡都可以,但是我更偏向使用大小为 32GB 等级为 class 10 的 SD 卡)
  • 电源适配器
  • 跳线(母对母跳线和公转母跳线)
  • 继电器板(我使用一个用于 12V 继电器的继电器板)
  • DS18B20 温度传感器
  • 树莓派的 Wi-Fi 适配器
  • 路由器(为了访问互联网,你需要有一个拥有端口转发的路由器)
  • 10KΩ 的电阻

软件要求:

  • 下载并安装 Raspbian 系统到你的 SD 卡
  • 有效的互联网连接
  • Apache web 服务器
  • PHP
  • WiringPi
  • 基于 Mac 或者 Windows 的 SSH 客户端

一般的配置和设置

1、 插入 SD 卡到树莓派,然后使用以太网网线将它连接到路由器;

2、 连接 WiFi 适配器;

3、 使用 SSH 方式登录到树莓派,然后使用下面的命令编辑 interfaces 文件:

sudo nano /etc/network/interfaces

这个命令会用一个叫做 nano 的编辑器打开这个文件。它是一个非常简单又易于使用的文本编辑器。如果你不熟悉基 Linux 的操作系统,可以使用键盘上的方向键来操作。

nano 打开这个文件后,你会看到这样一个界面:

 title=

4、要配置你的无线网络,按照下面所示修改这个文件:

iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
   wpa-ssid "Your Network SSID"
   wpa-psk "Your Password"

5、 按 CTRL+O 保存,然后按 CTRL+X 退出编辑器。

到目前为止,一切都已经配置完成,接下来你需要做的就是使用命令重新加载网络:

sudo service networking reload

(警告:如果你是使用远程连接的方式连接的树莓派,连接将会中断。)

软件配置

安装 Apache web 服务器

Apache 是一个受欢迎的服务器应用,你可以在树莓派安装这个程序让它提供网页服务。Apache 原本就可以通过 HTTP 方式提供 HTML 文件服务,添加其他模块后,Apache 还可以使用像 PHP 这样的脚本语言来提供动态网页的服务。

可以在命令行输入下面命令安装 Apache:

sudo apt-get install apache2 -y

安装完成后,可以在浏览器地址栏输入树莓派的 IP 地址来测试 web 服务器。如果你可以获得下面图片的内容,说明你已经成功地安装并设置好了你的服务器。

 title=

要改变这个默认的页面和添加你自己的 html 文件,进入 var/www/html 目录:

cd /var/www/html

添加一些文件来测试是否成功。

安装 PHP

PHP 是一个预处理器,这意味着它是当服务器收到网页请求时才会运行的一段代码。它开始运行,处理网页上需要被显示的内容,然后把网页发送给浏览器。不像静态的 HTML,PHP 在不同的环境下可以显示不同的内容。其他的语言也可以做到这一点,但是由于 WordPress 是用 PHP 编写的,有些时候你需要使用它。PHP 是 web 上一种非常受欢迎的语言,像 Facebok 和 Wikipeadia 这样的大型项目都是用 PHP 编写的。

使用下面的命令安装 PHP 和 Apache 软件包:

sudo apt-get install php5 libapache2-mod-php5 -y

测试 PHP

创建文件 index.php

sudo nano index.php

在里面写入一些 PHP 内容:

<?php echo "hello world"; ?>

保存文件,接下来删除 index.html,因为它比 index.php 的优先级更高:

sudo rm index.html

刷新你的浏览器,你会看到 “hello world”。这并不是动态的,但是它仍然由 PHP 提供服务。如果你在上面看到提原始的 PHP 文件而不是“hello world”,重新加载和重启 Apahce(LCTT 译注,重启即可):

sudo /etc/init.d/apache2 reload
sudo /etc/init.d/apache2 restart

安装 WiringPi

为了可以对代码的更改进行跟踪,WiringPi 的维护采用 git。但假如你因为某些原因而没法使用 git,还有一种可以替代的方案。(通常你的防火墙会把你隔离开来,所以请先检查一下你的防火墙的设置情况!)

如果你还没有安装 git,那么在 Debian 及其衍生版本中(比如 Raspbian),你可以这样安装它:

sudo apt-get install git-core

若是你遇到了一些错误,请确保你的树莓派是最新版本的 Raspbian 系统:

sudo apt-get update sudo apt-get upgrade

使用 git 获取最 WiringPi:

sudo git clone git://git.drogon.net/wiringPi

如果你之前已经使用过 clone 操作,那么可以使用下面命令:

cd wiringPi && git pull origin

这个命令会将会获取更新的版本,你然后可以重新运行下面的构建脚本。

有一个新的简化的脚本来构建和安装:

cd wiringPi && ./build

这个新的构建脚本将会为你完成编译和安装 WiringPi。它曾一度需要使用 sudo 命令,所以在运行这它之前你可能需要检查一下这个脚本。

测试 WiringPi

运行 gpio 命令来检查安装成功与否:

gpio -v gpio readall

这将给你一些信心,软件运行良好。

连接 DS18B20 传感器到树莓派

  • 传感器上的黑线用于 GND。
  • 红线用于 VCC。
  • 黄线是 GPIO 线。

 title=

连线:

  • VCC 连接 3V 的 1 号引脚。
  • GPIO 线连接 7 号引脚(GPIO4)。
  • 地线连接 GND 的 9 号引脚。

软件配置

为了用 PHP 使用 DS18B20 温度传感器模块,你需要执行下面的命令来激活用于树莓派上 GPIO 引脚和 DS18B20 的内核模块:

sudo modprobe w1-gpio
sudo modprobe w1-therm

你不想每次 Raspberry 重启后都手动执行上述命令,所以你想每次开机能自动启动这些模块。可以在文件 /etc/modules 中添加下面的命令行来做到:

sudo nano /etc/modules/

添加下面的命令行到它里面:

w1-gpio
w1-therm

为了测试,输入:

cd /sys/bus/w1/devices/

现在输入 ls

你会看到你的设备信息。在设备驱动程序中,你的 DS18B20 传感器应该作为一串字母和数字被列出。在本例中,设备被记录为 28-000005e2fdc3。然后你需要使用 cd 命令来访问传感器,用你自己的序列号替代我的: cd 28-000005e2fdc3

DS18B20 会周期性的将数据写入文件 w1_slave,所以你只需要使用命令 cat来读出数据: cat w1_slave

这会生成下面的两行文本,输出中 t= 表示摄氏单位的温度。在前两位数后面加上一个小数点(例如,我收到的温度读数是 30.125 摄氏度)。

连接继电器

1、 取两根跳线,把其中一根连接到树莓派上的 GPIO24(18 号引脚),另一根连接 GND 引脚。你可以参考下面这张图。

2、 现在将跳线的另一端连接到继电器板。GND 连接到继电器上的 GND,GPIO 输出线连接到继电器的通道引脚号,这取决于你正使用的继电器型号。记住,将树莓派上的 GND 与继电器上的 GND 连接连接起来,树莓派上的 GPIO 输出连接继电器上的输入引脚。

 title=

注意!将继电器连接树莓派的时候小心一些,因为它可能会导致电流回流,这会造成短路。

3、 现在将电源连接继电器,可以使用 12V 的电源适配器,也可以将 VCC 引脚连接到什么破上的 3.3V 或 5.5V 引脚。

使用 PHP 控制继电器

让我们先写一个借助于 WiringPi 软件用来控制 Paspberry Pi 上 GPIO 引脚的 PHP 脚本。

1、在 Apache 服务器的网站根目录下创建一个文件,使用下面命令切换到该目录:

cd /var/www/html

2、 新建一个叫 Home 的文件夹:

sudo mkdir Home

3、 新建一个叫 on.php的脚本

sudo nano on.php

4、 在脚本中加入下面的代码:

<?php
        system("gpio-g mode 24 out");
        system("gpio-g write 24 1");
?>

5、 使用 CTRL+O 保存文件,CTRL+X 退出。

上面的代码中,你在第一行使用命令将 24 号 GPIO引脚设置为 output 模式:

system("gpio-g mode 24 out");

在第二行,你使用 1 将 24 号引脚 GPIO 打开,在二进制中"1"表示打开,"0"表示关闭。

6、 为了关闭继电器,可以创建另外一个 off.php 文件,并用 0 替换 1

<?php
        system(" gpio-g mode 24 out ");
        system(" gpio-g write 24 1 ");
?>

7、 如果你已经将继电器连接了树莓派,可以在浏览器中输入你的树莓派的 IP 地址,并在后面加上目录名和文件名来进行访问:

http://{IPADDRESS}/home/on.php 

这将会打开继电器。

8、 要关闭它,可以访问叫 off.php 的文件:

http://{IPADDRESS}/home/off.php

现在你需要能够在一个单独的页面来控制这两样事情,而不用单独的刷新或者访问这两个页面。你可以使用 AJAX 来完成。

9、 新建一个 HTML 文件,并在其中加入下面代码:

<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">// <![CDATA[
$(document).ready(function() {
  $('#on').click(function(){
  var a= new XMLHttpRequest();
  a.open("GET", "on.php"); a.onreadystatechange=function(){
    if (a.readyState==4){   
      if(a.status ==200){
      } else alert ("http error");   
      }  
    }
    a.send();
  });
});
$(document).ready(function()
  {  
    $('#Off').click(function(){
      var a= new XMLHttpRequest();
      a.open("GET", "off.php");
      a.onreadystatechange=function(){
        if(a.readyState==4){
          if(a.status ==200){
          } else alert ("http error");   
          }   
        }
      a.send();
    });
  });
</script>
<button id="on" type="button"``Switch Lights On </button>
<button id="off" type="button"``Switch Lights Off </button>

10、 保存文件,进入你的 web 浏览器目录,然后打开那个网页。你会看到两个按钮,它们可以打开和关闭灯泡。基于同样的想法,你还可以使用 bootstrap 和 CSS 来创建一个更加漂亮的 web 界面。

在这个网页上观察温度

1、 新建一个 temperature.php 的文件:

sudo nano temperature.php

2、 在文件中加入下面的代码,用你自己的设备 ID 替换 10-000802292522

<?php
//File to read
$file = '/sys/devices/w1_bus_master1/10-000802292522/w1_slave';
//Read the file line by line
$lines = file($file);
//Get the temp from second line
$temp = explode('=', $lines[1]);
//Setup some nice formatting (i.e., 21,3)
$temp = number_format($temp[1] / 1000, 1, ',', '');
//And echo that temp
echo $temp . " °C";
?>

3、 打开你刚刚创建的 HTML 文件,并创建一个新的带有 id 为 “screen” 的 <div>标签

<div id="screen"></div>

4、 在这个标签后或者这个文档的尾部下面的代码:

<script>
$(document).ready(function(){
  setInterval(function(){
    $("#screen").load('temperature.php')
  }, 1000);
});
</script>

其中,#screen 是标签 <div>id ,你想在它里面显示温度。它会每隔 1000 毫秒加载一次 temperature.php 文件。

我使用了 bootstrap 框架来制作一个漂亮的面板来显示温度,你还可以加入多个图标和图形让网页更有吸引力。

这只是一个控制继电器板并显示温度的基础的系统,你可以通过创建基于定时和从恒温器读数等基于事件触发来进一步地对系统进行开发。

( 题图:opensource.com)


作者简介:

Abdul Hannan Mustajab: 我 17 岁,生活在印度。我正在追求科学,数学和计算机科学方面的教育。我在 spunkytechnology.com 上发表关于我的项目的博客。我一直在对使用不同的微控制器和电路板的基于物联网的 AI 进行研究。


via: https://opensource.com/article/17/3/operate-relays-control-gpio-pins-raspberry-pi

作者:Abdul Hannan Mustajab 译者:zhousiyu325 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

个人 Web 服务器即 “云”,只不过是你拥有和控制它,而不是一个大型公司。

拥有一个自己的云有很多好处,包括可定制、免费存储、免费的互联网服务、通往开源软件之路、高安全性、完全控制您的内容、快速更改的能力、实验代码的地方等等。 这些好处大部分是无法估量的,但在财务上,这些好处可以为您每个月节省超过 100 美元。

 title=

我本可以选择 AWS ,但我更喜欢完全自由且安全性可控,并且我可以学一下这些东西是如何搭建的。

  • 私有 Web 托管:而非 BlueHost 或 DreamHost
  • 云存储:而非 Dropbox、Box、Google Drive、Microsoft Azure、iCloud 或是 AWS
  • 自主部署安全
  • HTTPS:Let’s Encrypt
  • 分析: Google
  • OpenVPN:不需要专有互联网连接(预计每个月花费 $7)

我所使用的物品清单:

  • 树莓派 3 代 Model B
  • MicroSD 卡(推荐使用 32 GB, 兼容树莓派的 SD 卡
  • USB microSD 卡读卡器
  • 以太网络线
  • 连接上 Wi-Fi 的路由器
  • 树莓派盒子
  • 亚马逊倍思的 MicroUSB 数据线
  • 苹果的充电器
  • USB 鼠标
  • USB 键盘
  • HDMI 线材
  • 显示器 (支持接入 HDMI)
  • MacBook Pro

步骤 1: 启动树莓派

下载最新发布的 Raspbian (树莓派的操作系统)。 Raspbian Jessie 的 ZIP 包就可以用 [脚注 1]。解压缩或提取下载的文件然后把它拷贝到 SD 卡里。使用 Pi Filler 可以让这些过程变得更简单。下载 Pi Filer 1.3 或最新的版本。解压或提取下载文件之后打开它,你应该会看到这样的提示:

 title=

确保 USB 读卡器这时还没有插上。如果已经插上了那就先弹出。点 “Continue” 继续下一步。你会看到一个让你选择文件的界面,选择你之前解压缩后的树莓派系统文件。然后你会看到另一个提示,如图所示:

 title=

把 MicroSD 卡(推荐 32 GB ,至少 16GB)插入到 USB MicroSD 卡读卡器里。然后把 USB 读卡器接入到你的电脑里。你可以把你的 SD 卡重命名为 “Raspberry” 以区别其他设备。然后点击 “Continue”。请先确保你的 SD 卡是空的,因为 Pi Filler 会在运行时 擦除 所有事先存在 SD 卡里的内容。如果你要备份卡里的内容,那你最好就马上备份。当你点 “Continue” 的时候,Raspbian OS 就会被写入到 SD 卡里。这个过程大概会花费一到三分钟左右。当写入完成后,推出 USB 读卡器,把 SD 卡拔出来插入到树莓派的 SD 卡槽里。把电源线接上,给树莓派供电。这时树莓派就会自己启动。树莓派的默认登录账户信息是:

  • 用户名: pi
  • 密码:raspberry

当树莓派首次启动完成时,会跳出一个标题为 “ 设置选项 Setup Options ” 的配置界面,就像下面的图片一样 [脚注 2]:

 title=

选择 “ 扩展文件系统 Expand Filesystem ” 这一选项并回车 [脚注 3]。 同时,我还推荐选择第二个选项 “ 修改密码 Change User Password ”。这对保证安全性来说尤为重要。它还能个性化你的树莓派。

在选项列表中选择第三项 “ 启用引导到桌面 Enable Boot To Desktop/Scratch ” 并回车。这时会跳到另一个标题为 “ 选择引导选项 Choose boot option ” 的界面,就像下面这张图这样:

 title=

在这个界面选择第二个选项 “ 以用户‘pi’登录图形化桌面 Desktop log in as user 'pi' at the graphical desktop ” 并回车 [脚注 4]。完成这个操作之后会回到之前的 “ 设置选项 Setup Options ” 界面。如果没有回到之前的界面的话就选择当前界面底部的 “OK” 按钮并回车。

当这些操作都完成之后,选择当前界面底部的 “Finish” 按钮并回车,这时它就会自动重启。如果没有自动重启的话,就在终端里使用如下命令来重启。

$ sudo reboot

接上一步的重启,如果所有步骤都顺利进行的话,你会进入到类似下面这样桌面环境中。

 title=

当你进入了桌面之后,在终端中执行如下命令来更新树莓派的固件。

$ sudo apt-get update
$ sudo apt-get upgrade-y
$ sudo apt-get dist-upgrade -y
$ sudo rpi-update

这些操作可能会花费几分钟时间。完成之后,现在运行着的树莓派就是最新的了。

步骤 2: 配置树莓派

SSH 指的是 Secure Shell,是一种加密网络协议,可让你在计算机和树莓派之间安全地传输数据。 你可以从 Mac 的命令行控制你的树莓派,而无需显示器或键盘。

要使用 SSH,首先需要你的树莓派的 IP 地址。 打开终端并输入:

$ sudo ifconfig

如果你在使用以太网,看 eth0 部分。如果你在使用 Wi-Fi, 看 wlan0 部分。

查找 inet addr,后跟一个 IP 地址,如 192.168.1.115,这是本篇文章中使用的默认 IP。

有了这个地址,在终端中输入 :

$ ssh [email protected]

对于 PC 上的 SSH,请参见 [脚注 5]。

出现提示时输入默认密码 raspberry,除非你之前更改过密码。

现在你已经通过 SSH 登录成功。

远程桌面

使用 GUI(图形用户界面)有时比命令行更容易。 在树莓派的命令行(使用 SSH)上键入:

$ sudo apt-get install xrdp

xrdp 支持 Mac 和 PC 的 Microsoft Remote Desktop 客户端。

在 Mac 上,在 App store 中搜索 “Microsoft Remote Desktop”。 下载它。 (对于 PC,请参见 [脚注 6]。)

安装完成之后,在你的 Mac 中搜索一个叫 “Microsoft Remote Desktop” 的应用并打开它,你会看到 :

 title=

点击 “New” 新建一个远程连接,在空白处填写如下配置。

 title=

关闭 “New” 窗口就会自动保存。

你现在应该看到 “My Desktop” 下列出的远程连接。 双击它。

简单加载后,你应该在屏幕上的窗口中看到你的树莓派桌面,如下所示:

 title=

好了,现在你不需要额外的鼠标、键盘或显示器就能控制你的树莓派。这是一个更为轻量级的配置。

静态化本地 IP 地址

有时候你的本地 IP 地址 192.168.1.115 会发生改变。我们需要让这个 IP 地址静态化。输入:

$ sudo ifconfig

eth0 部分或 wlan0 部分,记下 inet addr(树莓派当前 IP),bcast(广播 IP 范围)和 mask(子网掩码地址)。 然后输入:

$ netstat -nr

记下 destinationgateway/network

 title=

大概应该是这样子的:

net address 192.168.1.115
bcast 192.168.1.255
mask 255.255.255.0
gateway 192.168.1.1
network 192.168.1.1
destination 192.168.1.0

有了这些信息,你可以很简单地设置一个静态 IP。输入:

$ sudo nano /etc/dhcpcd.conf

不要去动 /etc/network/interfaces

剩下要做的就是把这些内容追加到这个文件的底部,把 IP 换成你想要的 IP 地址。

interface eth0
static ip_address=192.168.1.115
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

一旦你设置了静态内部 IP 地址,这时需要通过如下命令重启你的树莓派 :

$ sudo reboot

重启完成之后,在终端中输入 :

$ sudo ifconfig

这时你就可以看到你的树莓派上的新的静态配置了。

静态化全局 IP 地址

如果您的 ISP(互联网服务提供商)已经给您一个静态外部 IP 地址,您可以跳到端口转发部分。 如果没有,请继续阅读。

你已经设置了 SSH、远程桌面和静态内部 IP 地址,因此现在本地网络中的计算机将会知道在哪里可以找到你的树莓派。 但是你仍然无法在本地 Wi-Fi 网络外部访问你的树莓派。 你需要树莓派可以从互联网上的任何地方公开访问。这需要静态的外部 IP 地址 [脚注 7]。

联系您的 ISP 并请求静态的外部(有时称为静态全局)IP 地址可能会是一个非常敏感的过程。 ISP 拥有决策权,所以我会非常小心处理。 他们可能拒绝你的的静态外部 IP 地址请求。 如果他们拒绝了你的请求,你不要怪罪于他们,因为这种类型的请求有法律和操作风险。 他们特别不希望客户运行中型或大型互联网服务。 他们可能会明确地询问为什么需要一个静态的外部 IP 地址。 最好说实话,告诉他们你打算主办一个低流量的个人网站或类似的小型非营利互联网服务。 如果一切顺利,他们应该会建立一个工单,并在一两个星期内给你打电话。

端口转发

这个新获得的 ISP 分配的静态全局 IP 地址是用于访问路由器。 树莓派现在仍然无法访问。 你需要设置端口转发才能访问树莓派。

端口是信息在互联网上传播的虚拟途径。 你有时需要转发端口,以使计算机像树莓派一样可以访问 Internet,因为它位于网络路由器后面。 VollmilchTV 专栏在 YouTube 上的一个视频,名字是什么是 TCP/IP,端口,路由,Intranet,防火墙,互联网,可以帮助你更好地了解端口。

端口转发可用于像 树莓派 Web 服务器或 VoIP 或点对点下载的应用程序。 有 65000个以上的端口可供选择,因此你可以为你构建的每个 Internet 应用程序分配一个不同的端口。

设置端口转发的方式取决于你的路由器。 如果你有 Linksys 的话,Gabriel Ramirez 在 YouTbue 上有一个标题叫 如何让你的 Apache Ubuntu 服务器连到互联网 的视频解释了如何设置。 如果您没有 Linksys,请阅读路由器附带的文档,以便自定义和定义要转发的端口。

你需要转发 SSH 以及远程桌面端口。

如果你认为你已经过配置端口转发了,输入下面的命令以查看它是否正在通过 SSH 工作:

$ ssh pi@your_global_ip_address

它应该会提示你输入密码。

检查端口转发是否也适用于远程桌面。 打开 Microsoft Remote Desktop。 你之前的的远程连接设置应该已经保存了,但需要使用静态的外部 IP 地址(例如 195.198.227.116)来更新 “PC 名称” 字段,而不是静态的内部地址(例如 192.168.1.115)。

现在,尝试通过远程桌面连接。 它应该简单地加载并显示树莓派的桌面。

 title=

好了, 树莓派现在可以从互联网上访问了,并且已经准备好进行高级项目了。

作为一个奖励选项,您可以保持到您的 Pi 的两个远程连接。 一个通过互联网,另一个通过 LAN(局域网)。很容易设置。在 Microsoft Remote Desktop 中,保留一个称为 “Pi Internet” 的远程连接,另一个称为 “Pi Local”。 将 Pi Internet 的 “PC 名称” 配置为静态外部 IP 地址,例如 195.198.227.116。 将 Pi Local 的 “PC 名称” 配置为静态内部 IP 地址,例如 192.168.1.115。 现在,您可以选择在全局或本地连接。

如果你还没有看过由 Gabriel Ramirez 发布的 如何让你的 Apache Ubuntu 服务器连到互联网,那么你可以去看一下,作为过渡到第二个项目的教程。 它将向您展示项目背后的技术架构。 在我们的例子中,你使用的是树莓派而不是 Ubuntu 服务器。 动态 DNS 位于域名公司和您的路由器之间,这是 Ramirez 省略的部分。 除了这个微妙之处外,视频是在整体上解释系统的工作原理。 您可能会注意到本教程涵盖了树莓派设置和端口转发,这是服务器端或后端。 查看原始来源,涵盖域名,动态 DNS,Jekyll(静态 HTML 生成器)和 Apache(网络托管)的更高级项目,这是客户端或前端。

脚注

[1] 我不建议从 NOOBS 操作系统开始。 我更喜欢从功能齐全的 Raspbian Jessie 操作系统开始。

[2] 如果没有弹出 “Setup Options”,可以通过打开终端并执行该命令来始终找到它:

$ sudo-rasps-config

[3] 我们这样做是为了将 SD 卡上存在的所有空间用作一个完整的分区。 所有这一切都是扩大操作系统以适应 SD 卡上的整个空间,然后可以将其用作树莓派的存储内存。

[4] 我们这样做是因为我们想启动进入熟悉的桌面环境。 如果我们不做这个步骤,树莓派每次会进入到终端而不是 GUI 中。

[5]

 title=

下载并运行 PuTTY 或 Windows 的其它 SSH 客户端。 在该字段中输入你的 IP 地址,如上图所示。 将默认端口保留为 22。 回车,PuTTY 将打开一个终端窗口,提示你输入用户名和密码。 填写然后开始在树莓派上进行你的远程工作。

[6] 如果尚未安装,请下载 Microsoft Remote Desktop。 搜索您的计算机上的的 Microsoft Remote Desktop。 运行。 提示时输入 IP 地址。 接下来,会弹出一个 xrdp 窗口,提示你输入用户名和密码。

[7] 路由器具有动态分配的外部 IP 地址,所以在理论上,它可以从互联网上暂时访问,但是您需要 ISP 的帮助才能使其永久访问。 如果不是这样,你需要在每次使用时重新配置远程连接。

原文出自 Mitchell McLaughlin's Full-Stack Computer Projects


作者简介:

Mitchell McLaughlin - 我是一名开放网络的贡献者和开发者。我感兴趣的领域很广泛,但我特别喜欢开源软件/硬件,比特币和编程。 我住在旧金山,我有过一些简短的 GoPro 和 Oracle 工作经验。


via: https://opensource.com/article/17/3/building-personal-web-server-raspberry-pi-3

作者:Mitchell McLaughlin 译者:chenxinlong 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

只用几步,使用 Weave Net 在树莓派上设置 Kubernetes。

当我开始对 ARM设备,特别是 Raspberry Pi 感兴趣时,我的第一个项目是一个 OpenVPN 服务器。

通过将 Raspberry Pi 作为家庭网络的安全网关,我可以使用我的手机来控制我的桌面,远程播放 Spotify,打开文档以及一些其他有趣的东西。我在第一个项目中使用了一个现有的教程,因为我害怕自己在命令行中拼砌。

几个月后,这种恐惧消失了。我扩展了我的原始项目,并使用 Samba 服务器从文件服务器分离出了 OpenVPN 服务器。这是我第一个没有完全按照教程来的项目。不幸的是,在我的 Samba 项目结束后,我意识到我没有记录任何东西,所以我无法复制它。为了重新创建它,我不得不重新参考我曾经用过的那些单独的教程,将项目拼回到一起。

我学到了关于开发人员工作流程的宝贵经验 - 跟踪你所有的更改。我在本地做了一个小的 git 仓库,并记录了我输入的所有命令。

发现 Kubernetes

2015 年 5 月,我发现了 Linux 容器和 Kubernetes。我觉得 Kubernetes 很有魅力,我可以使用仍然处于技术发展的概念 - 并且我实际上可以用它。平台本身及其所呈现的可能性令人兴奋。在此之前,我才刚刚在一块 Raspberry Pi 上运行了一个程序。而有了 Kubernetes,我可以做出比以前更先进的配置。

那时候,Docker(v1.6 版本,如果我记得正确的话)在 ARM 上有一个 bug,这意味着在 Raspberry Pi 上运行 Kubernetes 实际上是不可能的。在早期的 0.x 版本中,Kubernetes 的变化很快。每次我在 AMD64 上找到一篇关于如何设置 Kubernetes 的指南时,它针对的还都是一个旧版本,与我当时使用的完全不兼容。

不管怎样,我用自己的方法在 Raspberry Pi 上创建了一个 Kubernetes 节点,而在 Kubernetes v1.0.1 中,我使用 Docker v1.7.1 让它工作了。这是第一个将 Kubernetes 全功能部署到 ARM 的方法。

在 Raspberry Pi 上运行 Kubernetes 的优势在于,由于 ARM 设备非常小巧,因此不会产生大量的功耗。如果程序以正确的方式构建而成,那么就可以在 AMD64 上用同样的方法运行同一个程序。这样的一块小型 IoT 板为教育创造了巨大的机会。用它来做演示也很有用,比如你要出差参加一个会议。携带 Raspberry Pi (通常)比拖着大型英特尔机器要容易得多。

现在按照我建议的 ARM(32 位和 64 位)的支持已被合并到 Kubernetes 核心中。ARM 的二进制文件会自动与 Kubernetes 一起发布。虽然我们还没有为 ARM 提供自动化的 CI(持续集成)系统,不过在 PR 合并之前会自动确定它可在 ARM 上工作,现在它运转得不错。

Raspberry Pi 上的分布式网络

我通过 kubeadm 发现了 Weave Net。Weave Mesh 是一个有趣的分布式网络解决方案,因此我开始了解更多关于它的内容。在 2016 年 12 月,我在 Weaveworks 收到了第一份合同工作,我成为了 Weave Net 中 ARM 支持团队的一员。

我很高兴可以在 Raspberry Pi 上运行 Weave Net 的工业案例,比如那些需要设备更加移动化的工厂。目前,将 Weave Scope 或 Weave Cloud 部署到 Raspberry Pi 可能不太现实(尽管可以考虑使用其他 ARM 设备),因为我猜这个软件需要更多的内存才能运行良好。理想情况下,随着 Raspberry Pi 升级到 2GB 内存,我想我可以在它上面运行 Weave Cloud 了。

在 Weave Net 1.9 中,Weave Net 支持了 ARM。Kubeadm(通常是 Kubernetes)在多个平台上工作。你可以使用 Weave 将 Kubernetes 部署到 ARM,就像在任何 AMD64 设备上一样安装 Docker、kubeadm、kubectl 和 kubelet。然后初始化控制面板组件运行的主机:

kubeadm init

接下来,用下面的命令安装你的 pod 网络:

kubectl apply -f https://git.io/weave-kube

在此之前在 ARM 上,你只能用 Flannel 安装 pod 网络,但是在 Weave Net 1.9 中已经改变了,它官方支持了 ARM。

最后,加入你的节点:

kubeadm join --token <token> <master-ip>

就是这样了!Kubernetes 已经部署到了 Raspberry Pi 上了。相比在 Intel/AMD64 上运行,你不用做什么特别的事情;Weave Net 在 ARM 上就能工作的很好。

Raspberry Pi 社区

我希望 Raspberry Pi 社区成长起来,他们的思想传播到世界其他地方。他们在英国和其他国家已经取得了成功,但在芬兰并不是很成功。我希望生态系统能够继续扩展,以让更多的人学习如何部署 Kubernetes 或 Weave 到 ARM 设备上。毕竟,这些是我学到的。通过在 Raspberry Pi 设备上自学,我更好地了解了 ARM 及其上面部署的软件。

最后的思考

我通过加入用户社区、提出问题和不同程度的测试,在线学习了关于 Raspberry Pi 和 Kubernetes 的一切。

我是居住在芬兰的说瑞典语的高中生,到目前为止,我还从来没有参加过编程或计算机课程。但我仍然能够加入开源社区,因为它对年龄或教育没有限制:你的工作是根据其价值来评判的。

对于那些第一次要在开源项目中做出贡献感到紧张的人,我想说:深入进去,因为这是完全值得的。你做什么没有任何限制,你将永远不知道开源世界将为你提供哪些机会。这会很有趣,我保证!


作者简介:

Lucas Käldström - 谢谢你发现我!我是一名来自芬兰的说瑞典语的高中生。


via: https://opensource.com/article/17/3/kubernetes-raspberry-pi

作者:Lucas Käldström 译者:geekpi 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

有些时候我们想从 DQYDJ 网站的数据中分析点有用的东西出来,在过去,我们要用 R 语言提取固定宽度的数据,然后通过数学建模来分析美国的最低收入补贴,当然也包括其他优秀的方法。

今天我将向你展示对大数据的一点探索,不过有点变化,使用的是全世界最流行的微型电脑————树莓派,如果手头没有,那就看下一篇吧(可能是已经处理好的数据),对于其他用户,请继续阅读吧,今天我们要建立一个树莓派 Hadoop集群!

I. 为什么要建立一个树莓派的 Hadoop 集群?

由三个树莓派节点组成的 Hadoop 集群

我们对 DQYDJ 的数据做了大量的处理工作,但这些还不能称得上是大数据。

和许许多多有争议的话题一样,数据的大小之别被解释成这样一个笑话:

如果能被内存所存储,那么它就不是大数据。 ————佚名

似乎这儿有两种解决问题的方法:

  1. 我们可以找到一个足够大的数据集合,任何家用电脑的物理或虚拟内存都存不下。
  2. 我们可以买一些不用特别定制,我们现有数据就能淹没它的电脑:
    —— 上手树莓派 2B

这个由设计师和工程师制作出来的精致小玩意儿拥有 1GB 的内存, MicroSD 卡充当它的硬盘,此外,每一台的价格都低于 50 美元,这意味着你可以花不到 250 美元的价格搭建一个 Hadoop 集群。

或许天下没有比这更便宜的入场券来带你进入大数据的大门。

II. 制作一个树莓派集群

我最喜欢制作的原材料。

这里我将给出我原来为了制作树莓派集群购买原材料的链接,如果以后要在亚马逊购买的话你可先这些链接收藏起来,也是对本站的一点支持。(谢谢)

开始制作

  1. 首先,装好三个树莓派,每一个用螺丝钉固定在亚克力面板上。(看下图)
  2. 接下来,安装以太网交换机,用双面胶贴在其中一个在亚克力面板上。
  3. 用双面胶贴将 USB 转接器贴在一个在亚克力面板使之成为最顶层。
  4. 接着就是一层一层都拼好——这里我选择将树莓派放在交换机和USB转接器的底下(可以看看完整安装好的两张截图)

想办法把线路放在需要的地方——如果你和我一样购买力 USB 线和网线,我可以将它们卷起来放在亚克力板子的每一层

现在不要急着上电,需要将系统烧录到 SD 卡上才能继续。

烧录 Raspbian

按照这个教程将 Raspbian 烧录到三张 SD 卡上,我使用的是 Win7 下的 Win32DiskImager

将其中一张烧录好的 SD 卡插在你想作为主节点的树莓派上,连接 USB 线并启动它。

启动主节点

这里有一篇非常棒的“Because We Can Geek”的教程,讲如何安装 Hadoop 2.7.1,此处就不再熬述。

在启动过程中有一些要注意的地方,我将带着你一起设置直到最后一步,记住我现在使用的 IP 段为 192.168.1.50 – 192.168.1.52,主节点是 .50,从节点是 .51 和 .52,你的网络可能会有所不同,如果你想设置静态 IP 的话可以在评论区看看或讨论。

一旦你完成了这些步骤,接下来要做的就是启用交换文件,Spark on YARN 将分割出一块非常接近内存大小的交换文件,当你内存快用完时便会使用这个交换分区。

(如果你以前没有做过有关交换分区的操作的话,可以看看这篇教程,让 swappiness 保持较低水准,因为 MicroSD 卡的性能扛不住)

现在我准备介绍有关我的和“Because We Can Geek”关于启动设置一些微妙的区别。

对于初学者,确保你给你的树莓派起了一个正式的名字——在 /etc/hostname 设置,我的主节点设置为 ‘RaspberryPiHadoopMaster’ ,从节点设置为 ‘RaspberryPiHadoopSlave#’

主节点的 /etc/hosts 配置如下:

#/etc/hosts
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

192.168.1.50    RaspberryPiHadoopMaster
192.168.1.51    RaspberryPiHadoopSlave1
192.168.1.52    RaspberryPiHadoopSlave2

如果你想让 Hadoop、YARN 和 Spark 运行正常的话,你也需要修改这些配置文件(不妨现在就编辑)。

这是 hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>  
  <name>fs.default.name</name>
  <value>hdfs://RaspberryPiHadoopMaster:54310</value>
</property>  
<property>  
  <name>hadoop.tmp.dir</name>
  <value>/hdfs/tmp</value>
</property>  
</configuration>

这是 yarn-site.xml (注意内存方面的改变):

<?xml version="1.0"?>
<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>4</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>128</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-vcores</name>
    <value>1</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-vcores</name>
    <value>4</value>
  </property>
<property>
   <name>yarn.nodemanager.vmem-check-enabled</name>
   <value>false</value>
   <description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
   <name>yarn.nodemanager.vmem-pmem-ratio</name>
   <value>4</value>
   <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property>
<property>  
<name>yarn.resourcemanager.resource-tracker.address</name>  
<value>RaspberryPiHadoopMaster:8025</value>  
</property>  
<property>  
<name>yarn.resourcemanager.scheduler.address</name>  
<value>RaspberryPiHadoopMaster:8030</value>  
</property>  
<property>  
<name>yarn.resourcemanager.address</name>  
<value>RaspberryPiHadoopMaster:8040</value>  
</property> 
</configuration>

slaves

RaspberryPiHadoopMaster
RaspberryPiHadoopSlave1
RaspberryPiHadoopSlave2

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>  
  <name>fs.default.name</name>
  <value>hdfs://RaspberryPiHadoopMaster:54310</value>
</property>  
<property>  
  <name>hadoop.tmp.dir</name>
  <value>/hdfs/tmp</value>
</property>  
</configuration>

设置两个从节点:

接下来按照 “Because We Can Geek”上的教程,你需要对上面的文件作出小小的改动。 在 yarn-site.xml 中主节点没有改变,所以从节点中不必含有这个 slaves 文件。

III. 在我们的树莓派集群中测试 YARN

如果所有设备都正常工作,在主节点上你应该执行如下命令:

start-dfs.sh
start-yarn.sh

当设备启动后,以 Hadoop 用户执行,如果你遵循教程,用户应该是 hduser

接下来执行 hdfs dfsadmin -report 查看三个节点是否都正确启动,确认你看到一行粗体文字 ‘Live datanodes (3)’:

Configured Capacity: 93855559680 (87.41 GB)
Raspberry Pi Hadoop Cluster picture Straight On
Present Capacity: 65321992192 (60.84 GB)
DFS Remaining: 62206627840 (57.93 GB)
DFS Used: 3115364352 (2.90 GB)
DFS Used%: 4.77%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
————————————————-
Live datanodes (3):
Name: 192.168.1.51:50010 (RaspberryPiHadoopSlave1)
Hostname: RaspberryPiHadoopSlave1
Decommission Status : Normal

你现在可以做一些简单的诸如 ‘Hello, World!’ 的测试,或者直接进行下一步。

IV. 安装 SPARK ON YARN

YARN 的意思是另一种非常好用的资源调度器(Yet Another Resource Negotiator),已经作为一个易用的资源管理器集成在 Hadoop 基础安装包中。

Apache Spark 是 Hadoop 生态圈中的另一款软件包,它是一个毁誉参半的执行引擎和捆绑的 MapReduce。在一般情况下,相对于基于磁盘存储的 MapReduce,Spark 更适合基于内存的存储,某些运行任务能够得到 10-100 倍提升——安装完成集群后你可以试试 Spark 和 MapReduce 有什么不同。

我个人对 Spark 还是留下非常深刻的印象,因为它提供了两种数据工程师和科学家都比较擅长的语言—— Python 和 R。

安装 Apache Spark 非常简单,在你家目录下,wget "为 Hadoop 2.7 构建的 Apache Spark”来自这个页面),然后运行 tar -xzf “tgz 文件”,最后把解压出来的文件移动至 /opt,并清除刚才下载的文件,以上这些就是安装步骤。

我又创建了只有两行的文件 spark-env.sh,其中包含 Spark 的配置文件目录。

SPARK_MASTER_IP=192.168.1.50
SPARK_WORKER_MEMORY=512m

(在 YARN 跑起来之前我不确定这些是否有必要。)

V. 你好,世界! 为 Apache Spark 寻找有趣的数据集!

在 Hadoop 世界里面的 ‘Hello, World!’ 就是做单词计数。

我决定让我们的作品做一些内省式……为什么不统计本站最常用的单词呢?也许统计一些关于本站的大数据会更有用。

如果你有一个正在运行的 WordPress 博客,可以通过简单的两步来导出和净化。

  1. 我使用 Export to Text 插件导出文章的内容到纯文本文件中
  2. 我使用一些压缩库编写了一个 Python 脚本来剔除 HTML
import bleach

# Change this next line to your 'import' filename, whatever you would like to strip
# HTML tags from.
ascii_string = open('dqydj_with_tags.txt', 'r').read()


new_string = bleach.clean(ascii_string, tags=[], attributes={}, styles=[], strip=True)
new_string = new_string.encode('utf-8').strip()

# Change this next line to your 'export' filename
f = open('dqydj_stripped.txt', 'w')
f.write(new_string)
f.close()

现在我们有了一个更小的、适合复制到树莓派所搭建的 HDFS 集群上的文件。

如果你不能树莓派主节点上完成上面的操作,找个办法将它传输上去(scp、 rsync 等等),然后用下列命令行复制到 HDFS 上。

hdfs dfs -copyFromLocal dqydj_stripped.txt /dqydj_stripped.txt

现在准备进行最后一步 - 向 Apache Spark 写入一些代码。

VI. 点亮 Apache Spark

Cloudera 有个极棒的程序可以作为我们的超级单词计数程序的基础,你可以在这里找到。我们接下来为我们的内省式单词计数程序修改它。

在主节点上安装‘stop-words’这个 python 第三方包,虽然有趣(我在 DQYDJ 上使用了 23,295 次 the 这个单词),你可能不想看到这些语法单词占据着单词计数的前列,另外,在下列代码用你自己的数据集替换所有有关指向 dqydj 文件的地方。

import sys

from stop_words import get_stop_words
from pyspark import SparkContext, SparkConf

if __name__ == "__main__":

  # create Spark context with Spark configuration
  conf = SparkConf().setAppName("Spark Count")
  sc = SparkContext(conf=conf)

  # get threshold
  try:
    threshold = int(sys.argv[2])
  except:
    threshold = 5

  # read in text file and split each document into words
  tokenized = sc.textFile(sys.argv[1]).flatMap(lambda line: line.split(" "))

  # count the occurrence of each word
  wordCounts = tokenized.map(lambda word: (word.lower().strip(), 1)).reduceByKey(lambda v1,v2:v1 +v2)

  # filter out words with fewer than threshold occurrences
  filtered = wordCounts.filter(lambda pair:pair[1] >= threshold)

  print "*" * 80
  print "Printing top words used"
  print "-" * 80
  filtered_sorted = sorted(filtered.collect(), key=lambda x: x[1], reverse = True)
  for (word, count) in filtered_sorted: print "%s : %d" % (word.encode('utf-8').strip(), count)


  # Remove stop words
  print "\n\n"
  print "*" * 80
  print "Printing top non-stop words used"
  print "-" * 80
  # Change this to your language code (see the stop-words documentation)
  stop_words = set(get_stop_words('en'))
  no_stop_words = filter(lambda x: x[0] not in stop_words, filtered_sorted)
  for (word, count) in no_stop_words: print "%s : %d" % (word.encode('utf-8').strip(), count)

保存好 wordCount.py,确保上面的路径都是正确无误的。

现在,准备念出咒语,让运行在 YARN 上的 Spark 跑起来,你可以看到我在 DQYDJ 使用最多的单词是哪一个。

/opt/spark-2.0.0-bin-hadoop2.7/bin/spark-submit –master yarn –executor-memory 512m –name wordcount –executor-cores 8 wordCount.py /dqydj_stripped.txt

VII. 我在 DQYDJ 使用最多的单词

可能入列的单词有哪一些呢?“can, will, it’s, one, even, like, people, money, don’t, also“.

嘿,不错,“money”悄悄挤进了前十。在一个致力于金融、投资和经济的网站上谈论这似乎是件好事,对吧?

下面是的前 50 个最常用的词汇,请用它们刻画出有关我的文章的水平的结论。

我希望你能喜欢这篇关于 Hadoop、YARN 和 Apache Spark 的教程,现在你可以在 Spark 运行和编写其他的应用了。

你的下一步是任务是开始阅读 pyspark 文档(以及用于其他语言的该库),去学习一些可用的功能。根据你的兴趣和你实际存储的数据,你将会深入学习到更多——有流数据、SQL,甚至机器学习的软件包!

你怎么看?你要建立一个树莓派 Hadoop 集群吗?想要在其中挖掘一些什么吗?你在上面看到最令你惊奇的单词是什么?为什么 'S&P' 也能上榜?

(题图:Pixabay,CC0)


via: https://dqydj.com/raspberry-pi-hadoop-cluster-apache-spark-yarn/

作者:PK 译者:popy32 校对:wxy

本文由 LCTT 组织编译,Linux中国 荣誉推出