Hadoop - Hướng dẫn nhanh

"90% dữ liệu trên thế giới được tạo ra trong vài năm qua."

Do sự ra đời của công nghệ, thiết bị và phương tiện liên lạc mới như các trang mạng xã hội, lượng dữ liệu do nhân loại sản xuất ra đang tăng lên nhanh chóng hàng năm. Lượng dữ liệu do chúng tôi tạo ra từ đầu thời điểm cho đến năm 2003 là 5 tỷ gigabyte. Nếu bạn dồn dữ liệu dưới dạng đĩa, nó có thể lấp đầy cả một sân bóng. Số tiền tương tự đã được tạo trong hai ngày một lần trong2011và cứ sau mười phút trong 2013. Tỷ lệ này vẫn đang tăng lên rất nhiều. Mặc dù tất cả thông tin được tạo ra này đều có ý nghĩa và có thể hữu ích khi được xử lý, nhưng nó đang bị bỏ quên.

Dữ liệu lớn là gì?

Big datalà một tập hợp các bộ dữ liệu lớn không thể được xử lý bằng các kỹ thuật tính toán truyền thống. Nó không phải là một kỹ thuật hay một công cụ đơn lẻ, mà nó đã trở thành một chủ đề hoàn chỉnh, bao gồm các công cụ, kỹ thuật và khuôn khổ khác nhau.

Dữ liệu lớn đi kèm với điều gì?

Dữ liệu lớn liên quan đến dữ liệu được tạo ra bởi các thiết bị và ứng dụng khác nhau. Dưới đây là một số lĩnh vực nằm dưới sự bảo trợ của Dữ liệu lớn.

  • Black Box Data - Nó là một thành phần của máy bay trực thăng, máy bay và máy bay phản lực, vv Nó thu âm giọng nói của tổ bay, ghi âm của micrô và tai nghe và thông tin hoạt động của máy bay.

  • Social Media Data - Các phương tiện truyền thông xã hội như Facebook và Twitter nắm giữ thông tin và quan điểm được đăng bởi hàng triệu người trên toàn cầu.

  • Stock Exchange Data - Dữ liệu của sàn giao dịch chứng khoán nắm giữ thông tin về các quyết định 'mua' và 'bán' được thực hiện đối với cổ phiếu của các công ty khác nhau do khách hàng đưa ra.

  • Power Grid Data - Dữ liệu lưới điện lưu trữ thông tin được sử dụng bởi một nút cụ thể đối với một trạm gốc.

  • Transport Data - Dữ liệu vận tải bao gồm mô hình, công suất, khoảng cách và tính khả dụng của phương tiện.

  • Search Engine Data - Công cụ tìm kiếm lấy rất nhiều dữ liệu từ các cơ sở dữ liệu khác nhau.

Do đó, Dữ liệu lớn bao gồm khối lượng khổng lồ, tốc độ cao và nhiều loại dữ liệu có thể mở rộng. Dữ liệu trong đó sẽ có ba loại.

  • Structured data - Dữ liệu quan hệ.

  • Semi Structured data - Dữ liệu XML.

  • Unstructured data - Word, PDF, Văn bản, Nhật ký Phương tiện.

Lợi ích của Dữ liệu lớn

  • Sử dụng thông tin được lưu giữ trên mạng xã hội như Facebook, các đại lý tiếp thị đang tìm hiểu về phản ứng cho các chiến dịch, chương trình khuyến mãi và các phương tiện quảng cáo khác của họ.

  • Sử dụng thông tin trên các phương tiện truyền thông xã hội như sở thích và nhận thức về sản phẩm của người tiêu dùng, các công ty sản phẩm và tổ chức bán lẻ đang lên kế hoạch sản xuất.

  • Sử dụng dữ liệu về tiền sử bệnh trước đây của bệnh nhân, các bệnh viện đang cung cấp dịch vụ nhanh chóng và tốt hơn.

Công nghệ dữ liệu lớn

Công nghệ dữ liệu lớn rất quan trọng trong việc cung cấp phân tích chính xác hơn, có thể dẫn đến việc ra quyết định cụ thể hơn, dẫn đến hiệu quả hoạt động cao hơn, giảm chi phí và giảm rủi ro cho doanh nghiệp.

Để khai thác sức mạnh của dữ liệu lớn, bạn sẽ yêu cầu một cơ sở hạ tầng có thể quản lý và xử lý khối lượng lớn dữ liệu có cấu trúc và phi cấu trúc trong thời gian thực và có thể bảo vệ quyền riêng tư và bảo mật của dữ liệu.

Có nhiều công nghệ khác nhau trên thị trường từ các nhà cung cấp khác nhau bao gồm Amazon, IBM, Microsoft, v.v., để xử lý dữ liệu lớn. Trong khi xem xét các công nghệ xử lý dữ liệu lớn, chúng tôi kiểm tra hai loại công nghệ sau:

Dữ liệu lớn hoạt động

Điều này bao gồm các hệ thống như MongoDB cung cấp khả năng hoạt động cho khối lượng công việc tương tác, thời gian thực, nơi dữ liệu chủ yếu được thu thập và lưu trữ.

Hệ thống Dữ liệu lớn NoSQL được thiết kế để tận dụng các kiến ​​trúc điện toán đám mây mới đã xuất hiện trong thập kỷ qua để cho phép các máy tính lớn được chạy một cách hiệu quả và không tốn kém. Điều này làm cho khối lượng công việc vận hành dữ liệu lớn dễ quản lý hơn, rẻ hơn và triển khai nhanh hơn.

Một số hệ thống NoSQL có thể cung cấp thông tin chi tiết về các mẫu và xu hướng dựa trên dữ liệu thời gian thực với mã hóa tối thiểu và không cần các nhà khoa học dữ liệu và cơ sở hạ tầng bổ sung.

Dữ liệu lớn phân tích

Chúng bao gồm các hệ thống như hệ thống cơ sở dữ liệu Xử lý song song khối lượng lớn (MPP) và MapReduce cung cấp khả năng phân tích để phân tích hồi cứu và phân tích phức tạp có thể chạm đến hầu hết hoặc tất cả dữ liệu.

MapReduce cung cấp một phương pháp phân tích dữ liệu mới bổ sung cho các khả năng được cung cấp bởi SQL và một hệ thống dựa trên MapReduce có thể được mở rộng từ các máy chủ đơn lẻ đến hàng nghìn máy cấp cao và cấp thấp.

Hai lớp công nghệ này bổ sung và thường xuyên được triển khai cùng nhau.

Hệ thống hoạt động so với hệ thống phân tích

Hoạt động Phân tích
Độ trễ 1 ms - 100 ms 1 phút - 100 phút
Đồng tiền 1000 - 100.000 1 - 10
Hình thức truy cập Viết và Đọc Đọc
Truy vấn Chọn lọc Không chọn lọc
Phạm vi dữ liệu Hoạt động Hồi tưởng
Người dùng cuối khách hàng Nhà khoa học dữ liệu
Công nghệ NoSQL MapReduce, Cơ sở dữ liệu MPP

Những thách thức về dữ liệu lớn

Những thách thức chính liên quan đến dữ liệu lớn như sau:

  • Thu thập dữ liệu
  • Curation
  • Storage
  • Searching
  • Sharing
  • Transfer
  • Analysis
  • Presentation

Để thực hiện những thách thức trên, các tổ chức thường sử dụng sự trợ giúp của các máy chủ doanh nghiệp.

Cách tiếp cận truyền thống

Theo cách tiếp cận này, doanh nghiệp sẽ có một máy tính để lưu trữ và xử lý dữ liệu lớn. Đối với mục đích lưu trữ, các lập trình viên sẽ nhận được sự trợ giúp của sự lựa chọn của các nhà cung cấp cơ sở dữ liệu như Oracle, IBM, v.v. Trong cách tiếp cận này, người dùng tương tác với ứng dụng, từ đó xử lý phần lưu trữ và phân tích dữ liệu.

Giới hạn

Cách tiếp cận này hoạt động tốt với những ứng dụng xử lý dữ liệu ít khổng lồ hơn có thể được cung cấp bởi máy chủ cơ sở dữ liệu tiêu chuẩn hoặc lên đến giới hạn của bộ xử lý đang xử lý dữ liệu. Nhưng khi phải xử lý một lượng lớn dữ liệu có thể mở rộng, thì việc xử lý dữ liệu đó thông qua một nút cổ chai cơ sở dữ liệu là một nhiệm vụ bận rộn.

Giải pháp của Google

Google đã giải quyết vấn đề này bằng cách sử dụng một thuật toán có tên là MapReduce. Thuật toán này chia nhiệm vụ thành các phần nhỏ và giao chúng cho nhiều máy tính, đồng thời thu thập kết quả từ chúng mà khi được tích hợp, tạo thành tập dữ liệu kết quả.

Hadoop

Sử dụng giải pháp do Google cung cấp, Doug Cutting và nhóm của anh ấy đã phát triển một Dự án nguồn mở có tên là HADOOP.

Hadoop chạy các ứng dụng sử dụng thuật toán MapReduce, nơi dữ liệu được xử lý song song với những dữ liệu khác. Nói tóm lại, Hadoop được sử dụng để phát triển các ứng dụng có thể thực hiện phân tích thống kê hoàn chỉnh trên một lượng lớn dữ liệu.

Hadoop là một khung công tác mã nguồn mở Apache được viết bằng java cho phép xử lý phân tán các tập dữ liệu lớn trên các cụm máy tính sử dụng các mô hình lập trình đơn giản. Ứng dụng khung Hadoop hoạt động trong một môi trường cung cấp khả năng lưu trữtính toán phân tán trên các cụm máy tính. Hadoop được thiết kế để mở rộng quy mô từ máy chủ đơn lẻ lên hàng nghìn máy, mỗi máy đều cung cấp khả năng tính toán và lưu trữ cục bộ.

Kiến trúc Hadoop

Về cốt lõi, Hadoop có hai lớp chính:

  • Lớp Xử lý / Tính toán (MapReduce) và
  • Lớp lưu trữ (Hệ thống tệp phân tán Hadoop).

MapReduce

MapReduce là một mô hình lập trình song song để viết các ứng dụng phân tán được tạo ra tại Google nhằm xử lý hiệu quả lượng lớn dữ liệu (tập dữ liệu nhiều terabyte), trên các cụm lớn (hàng nghìn nút) của phần cứng hàng hóa theo cách thức đáng tin cậy, chịu được lỗi. Chương trình MapReduce chạy trên Hadoop, một khuôn khổ nguồn mở Apache.

Hệ thống tệp phân tán Hadoop

Hệ thống tệp phân tán Hadoop (HDFS) dựa trên Hệ thống tệp của Google (GFS) và cung cấp hệ thống tệp phân tán được thiết kế để chạy trên phần cứng hàng hóa. Nó có nhiều điểm tương đồng với các hệ thống tệp phân tán hiện có. Tuy nhiên, sự khác biệt so với các hệ thống tệp phân tán khác là đáng kể. Nó có khả năng chịu lỗi cao và được thiết kế để triển khai trên phần cứng giá rẻ. Nó cung cấp khả năng truy cập thông lượng cao vào dữ liệu ứng dụng và thích hợp cho các ứng dụng có tập dữ liệu lớn.

Ngoài hai thành phần cốt lõi được đề cập ở trên, khung công tác Hadoop cũng bao gồm hai mô-đun sau:

  • Hadoop Common - Đây là các thư viện Java và tiện ích được yêu cầu bởi các mô-đun Hadoop khác.

  • Hadoop YARN - Đây là một khuôn khổ để lập lịch công việc và quản lý tài nguyên cụm.

Hadoop hoạt động như thế nào?

Khá tốn kém để xây dựng các máy chủ lớn hơn với cấu hình nặng xử lý quy mô lớn, nhưng để thay thế, bạn có thể kết hợp nhiều máy tính hàng hóa với CPU đơn, như một hệ thống phân tán chức năng duy nhất và trên thực tế, các máy được phân nhóm có thể đọc tập dữ liệu song song và cung cấp thông lượng cao hơn nhiều. Hơn nữa, nó rẻ hơn một máy chủ cao cấp. Vì vậy, đây là yếu tố thúc đẩy đầu tiên đằng sau việc sử dụng Hadoop mà nó chạy trên các máy chi phí thấp và phân cụm.

Hadoop chạy mã trên một nhóm máy tính. Quá trình này bao gồm các tác vụ cốt lõi sau mà Hadoop thực hiện:

  • Dữ liệu ban đầu được chia thành các thư mục và tệp. Các tệp được chia thành các khối có kích thước đồng nhất 128M và 64M (tốt nhất là 128M).

  • Các tệp này sau đó được phân phối trên các nút cụm khác nhau để xử lý thêm.

  • HDFS, nằm trên hệ thống tệp cục bộ, giám sát quá trình xử lý.

  • Các khối được sao chép để xử lý lỗi phần cứng.

  • Kiểm tra xem mã đã được thực thi thành công chưa.

  • Thực hiện sắp xếp diễn ra giữa các giai đoạn bản đồ và giảm bớt.

  • Gửi dữ liệu đã sắp xếp đến một máy tính nhất định.

  • Viết nhật ký gỡ lỗi cho từng công việc.

Ưu điểm của Hadoop

  • Khung công tác Hadoop cho phép người dùng nhanh chóng viết và kiểm tra các hệ thống phân tán. Nó hiệu quả và nó tự động phân phối dữ liệu và hoạt động trên các máy và đến lượt nó, sử dụng sự song song cơ bản của các lõi CPU.

  • Hadoop không dựa vào phần cứng để cung cấp khả năng chịu lỗi và tính sẵn sàng cao (FTHA), mà chính thư viện Hadoop đã được thiết kế để phát hiện và xử lý các lỗi ở lớp ứng dụng.

  • Máy chủ có thể được thêm vào hoặc xóa khỏi cụm một cách động và Hadoop tiếp tục hoạt động mà không bị gián đoạn.

  • Một ưu điểm lớn khác của Hadoop là ngoài là mã nguồn mở, nó tương thích trên tất cả các nền tảng vì nó dựa trên Java.

Hadoop được hỗ trợ bởi nền tảng GNU / Linux và các hương vị của nó. Do đó, chúng ta phải cài đặt hệ điều hành Linux để thiết lập môi trường Hadoop. Trong trường hợp bạn có hệ điều hành không phải Linux, bạn có thể cài đặt phần mềm Virtualbox trong đó và có Linux bên trong Virtualbox.

Cài đặt trước Cài đặt

Trước khi cài đặt Hadoop vào môi trường Linux, chúng ta cần thiết lập Linux bằng ssh(Vỏ an toàn). Làm theo các bước dưới đây để thiết lập môi trường Linux.

Tạo người dùng

Lúc đầu, bạn nên tạo một người dùng riêng cho Hadoop để tách hệ thống tệp Hadoop khỏi hệ thống tệp Unix. Làm theo các bước dưới đây để tạo người dùng -

  • Mở thư mục gốc bằng lệnh “su”.

  • Tạo người dùng từ tài khoản gốc bằng lệnh “useradd username”.

  • Bây giờ bạn có thể mở một tài khoản người dùng hiện có bằng lệnh “su username”.

Mở thiết bị đầu cuối Linux và nhập các lệnh sau để tạo người dùng.

$ su 
   password: 
# useradd hadoop 
# passwd hadoop 
   New passwd: 
   Retype new passwd

Thiết lập SSH và tạo khóa

Thiết lập SSH được yêu cầu để thực hiện các hoạt động khác nhau trên một cụm như khởi động, dừng, các hoạt động trình bao daemon phân tán. Để xác thực những người dùng khác nhau của Hadoop, cần phải cung cấp cặp khóa công khai / riêng tư cho người dùng Hadoop và chia sẻ nó với những người dùng khác nhau.

Các lệnh sau được sử dụng để tạo cặp giá trị khóa bằng SSH. Sao chép các khóa công khai biểu mẫu id_rsa.pub vào allow_keys và cung cấp cho chủ sở hữu quyền đọc và ghi đối với tệp ủy quyền.

$ ssh-keygen -t rsa 
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys

Cài đặt Java

Java là điều kiện tiên quyết chính cho Hadoop. Trước hết, bạn nên xác minh sự tồn tại của java trong hệ thống của mình bằng lệnh “java -version”. Cú pháp của lệnh phiên bản java được đưa ra dưới đây.

$ java -version

Nếu mọi thứ theo thứ tự, nó sẽ cung cấp cho bạn kết quả sau.

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

Nếu java chưa được cài đặt trong hệ thống của bạn, hãy làm theo các bước dưới đây để cài đặt java.

Bước 1

Tải xuống java (JDK <phiên bản mới nhất> - X64.tar.gz) bằng cách truy cập liên kết sau www.oracle.com

Sau đó jdk-7u71-linux-x64.tar.gz sẽ được tải xuống hệ thống của bạn.

Bước 2

Nói chung, bạn sẽ tìm thấy tệp java đã tải xuống trong thư mục Tải xuống. Xác minh nó và trích xuấtjdk-7u71-linux-x64.gz sử dụng các lệnh sau.

$ cd Downloads/ 
$ ls jdk-7u71-linux-x64.gz $ tar zxf jdk-7u71-linux-x64.gz 
$ ls 
jdk1.7.0_71   jdk-7u71-linux-x64.gz

Bước 3

Để cung cấp java cho tất cả người dùng, bạn phải di chuyển nó đến vị trí “/ usr / local /”. Mở root và nhập các lệnh sau.

$ su 
password: 
# mv jdk1.7.0_71 /usr/local/ 
# exit

Bước 4

Để thiết lập PATHJAVA_HOME biến, thêm các lệnh sau vào ~/.bashrc tập tin.

export JAVA_HOME=/usr/local/jdk1.7.0_71 
export PATH=$PATH:$JAVA_HOME/bin

Bây giờ áp dụng tất cả các thay đổi vào hệ thống đang chạy hiện tại.

$ source ~/.bashrc

Bước 5

Sử dụng các lệnh sau để định cấu hình các lựa chọn thay thế java:

# alternatives --install /usr/bin/java java usr/local/java/bin/java 2
# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2

# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar

Bây giờ hãy xác minh lệnh java -version từ terminal như đã giải thích ở trên.

Tải xuống Hadoop

Tải xuống và giải nén Hadoop 2.4.1 từ nền tảng phần mềm Apache bằng các lệnh sau.

$ su 
password: 
# cd /usr/local 
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/ 
hadoop-2.4.1.tar.gz 
# tar xzf hadoop-2.4.1.tar.gz 
# mv hadoop-2.4.1/* to hadoop/ 
# exit

Chế độ hoạt động Hadoop

Khi bạn đã tải xuống Hadoop, bạn có thể vận hành cụm Hadoop của mình ở một trong ba chế độ được hỗ trợ -

  • Local/Standalone Mode - Sau khi tải xuống Hadoop trong hệ thống của bạn, theo mặc định, nó được định cấu hình ở chế độ độc lập và có thể chạy như một quy trình java duy nhất.

  • Pseudo Distributed Mode- Nó là một mô phỏng phân tán trên một máy. Mỗi daemon Hadoop như hdfs, fiber, MapReduce, v.v., sẽ chạy như một quy trình java riêng biệt. Chế độ này rất hữu ích cho sự phát triển.

  • Fully Distributed Mode- Chế độ này được phân phối đầy đủ với tối thiểu hai máy trở lên như một cụm. Chúng ta sẽ tìm hiểu chi tiết về chế độ này trong các chương tới.

Cài đặt Hadoop ở Chế độ độc lập

Ở đây chúng ta sẽ thảo luận về việc cài đặt Hadoop 2.4.1 ở chế độ độc lập.

Không có daemon nào đang chạy và mọi thứ đều chạy trong một JVM duy nhất. Chế độ độc lập phù hợp để chạy các chương trình MapReduce trong quá trình phát triển, vì nó dễ dàng kiểm tra và gỡ lỗi chúng.

Thiết lập Hadoop

Bạn có thể đặt các biến môi trường Hadoop bằng cách thêm các lệnh sau vào ~/.bashrc tập tin.

export HADOOP_HOME=/usr/local/hadoop

Trước khi tiếp tục, bạn cần đảm bảo rằng Hadoop đang hoạt động tốt. Chỉ cần đưa ra lệnh sau:

$ hadoop version

Nếu mọi thứ đều ổn với thiết lập của bạn, thì bạn sẽ thấy kết quả sau:

Hadoop 2.4.1 
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768 
Compiled by hortonmu on 2013-10-07T06:28Z 
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4

Nó có nghĩa là thiết lập chế độ độc lập của Hadoop của bạn đang hoạt động tốt. Theo mặc định, Hadoop được định cấu hình để chạy ở chế độ không phân phối trên một máy.

Thí dụ

Hãy kiểm tra một ví dụ đơn giản của Hadoop. Cài đặt Hadoop cung cấp tệp jar MapReduce ví dụ sau, cung cấp chức năng cơ bản của MapReduce và có thể được sử dụng để tính toán, chẳng hạn như giá trị Pi, số lượng từ trong danh sách tệp nhất định, v.v.

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar

Hãy có một thư mục đầu vào mà chúng ta sẽ đẩy một vài tệp và yêu cầu của chúng ta là đếm tổng số từ trong các tệp đó. Để tính tổng số từ, chúng tôi không cần phải viết MapReduce của mình, miễn là tệp .jar chứa phần triển khai cho số từ. Bạn có thể thử các ví dụ khác bằng cách sử dụng cùng một tệp .jar; chỉ cần đưa ra các lệnh sau để kiểm tra các chương trình chức năng MapReduce được hỗ trợ bởi tệp hadoop-mapreduce -amples-2.2.0.jar.

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar

Bước 1

Tạo các tệp nội dung tạm thời trong thư mục đầu vào. Bạn có thể tạo thư mục đầu vào này ở bất kỳ đâu bạn muốn làm việc.

$ mkdir input $ cp $HADOOP_HOME/*.txt input $ ls -l input

Nó sẽ cung cấp các tệp sau trong thư mục đầu vào của bạn -

total 24 
-rw-r--r-- 1 root root 15164 Feb 21 10:14 LICENSE.txt 
-rw-r--r-- 1 root root   101 Feb 21 10:14 NOTICE.txt
-rw-r--r-- 1 root root  1366 Feb 21 10:14 README.txt

Các tệp này đã được sao chép từ thư mục chính cài đặt Hadoop. Đối với thử nghiệm của mình, bạn có thể có các bộ tệp lớn và khác nhau.

Bước 2

Hãy bắt đầu quá trình Hadoop để đếm tổng số từ trong tất cả các tệp có sẵn trong thư mục đầu vào, như sau:

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar  wordcount input output

Bước 3

Bước 2 sẽ thực hiện xử lý theo yêu cầu và lưu đầu ra trong tệp output / part-r00000, bạn có thể kiểm tra bằng cách sử dụng -

$cat output/*

Nó sẽ liệt kê tất cả các từ cùng với tổng số của chúng có sẵn trong tất cả các tệp có sẵn trong thư mục đầu vào.

"AS      4 
"Contribution" 1 
"Contributor" 1 
"Derivative 1
"Legal 1
"License"      1
"License");     1 
"Licensor"      1
"NOTICE”        1 
"Not      1 
"Object"        1 
"Source”        1 
"Work”    1 
"You"     1 
"Your")   1 
"[]"      1 
"control"       1 
"printed        1 
"submitted"     1 
(50%)     1 
(BIS),    1 
(C)       1 
(Don't)   1 
(ECCN)    1 
(INCLUDING      2 
(INCLUDING,     2 
.............

Cài đặt Hadoop trong Chế độ phân tán giả

Làm theo các bước dưới đây để cài đặt Hadoop 2.4.1 ở chế độ giả phân phối.

Bước 1 - Thiết lập Hadoop

Bạn có thể đặt các biến môi trường Hadoop bằng cách thêm các lệnh sau vào ~/.bashrc tập tin.

export HADOOP_HOME=/usr/local/hadoop 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin export HADOOP_INSTALL=$HADOOP_HOME

Bây giờ áp dụng tất cả các thay đổi vào hệ thống đang chạy hiện tại.

$ source ~/.bashrc

Bước 2 - Cấu hình Hadoop

Bạn có thể tìm thấy tất cả các tệp cấu hình Hadoop ở vị trí “$ HADOOP_HOME / etc / hadoop”. Bắt buộc phải thực hiện các thay đổi trong các tệp cấu hình đó theo cơ sở hạ tầng Hadoop của bạn.

$ cd $HADOOP_HOME/etc/hadoop

Để phát triển các chương trình Hadoop trong java, bạn phải đặt lại các biến môi trường java trong hadoop-env.sh tập tin bằng cách thay thế JAVA_HOME giá trị với vị trí của java trong hệ thống của bạn.

export JAVA_HOME=/usr/local/jdk1.7.0_71

Sau đây là danh sách các tệp mà bạn phải chỉnh sửa để cấu hình Hadoop.

core-site.xml

Các core-site.xml tệp chứa thông tin như số cổng được sử dụng cho cá thể Hadoop, bộ nhớ được cấp phát cho hệ thống tệp, giới hạn bộ nhớ để lưu trữ dữ liệu và kích thước của bộ đệm Đọc / Ghi.

Mở core-site.xml và thêm các thuộc tính sau vào giữa các thẻ <configuration>, </configuration>.

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value> 
   </property>
</configuration>

hdfs-site.xml

Các hdfs-site.xmltệp chứa thông tin như giá trị của dữ liệu sao chép, đường dẫn nút tên và đường dẫn nút dữ liệu của hệ thống tệp cục bộ của bạn. Nó có nghĩa là nơi bạn muốn lưu trữ cơ sở hạ tầng Hadoop.

Hãy để chúng tôi giả sử dữ liệu sau đây.

dfs.replication (data replication value) = 1 

(In the below given path /hadoop/ is the user name. 
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.) 
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode 

(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.) 
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode

Mở tệp này và thêm các thuộc tính sau vào giữa các thẻ <configuration> </configuration> trong tệp này.

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
    
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
   </property>
    
   <property>
      <name>dfs.data.dir</name> 
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value> 
   </property>
</configuration>

Note - Trong tệp trên, tất cả các giá trị thuộc tính đều do người dùng xác định và bạn có thể thực hiện thay đổi theo cơ sở hạ tầng Hadoop của mình.

yarn-site.xml

Tệp này được sử dụng để cấu hình sợi thành Hadoop. Mở tệp fiber-site.xml và thêm các thuộc tính sau vào giữa các thẻ <configuration>, </configuration> trong tệp này.

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value> 
   </property>
</configuration>

mapred-site.xml

Tệp này được sử dụng để chỉ định khung MapReduce mà chúng tôi đang sử dụng. Theo mặc định, Hadoop chứa một mẫu sợi-site.xml. Trước hết, cần phải sao chép tệp từmapred-site.xml.template đến mapred-site.xml sử dụng lệnh sau.

$ cp mapred-site.xml.template mapred-site.xml

Mở mapred-site.xml và thêm các thuộc tính sau vào giữa các thẻ <configuration>, </configuration> trong tệp này.

<configuration>
   <property> 
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Xác minh cài đặt Hadoop

Các bước sau được sử dụng để xác minh cài đặt Hadoop.

Bước 1 - Thiết lập nút đặt tên

Thiết lập nút tên bằng lệnh “hdfs namenode -format” như sau.

$ cd ~ 
$ hdfs namenode -format

Kết quả mong đợi như sau.

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG:   host = localhost/192.168.1.11 
STARTUP_MSG:   args = [-format] 
STARTUP_MSG:   version = 2.4.1 
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory 
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted. 
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to 
retain 1 images with txid >= 0 
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0 
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11 
************************************************************/

Bước 2 - Xác minh dfs Hadoop

Lệnh sau được sử dụng để bắt đầu dfs. Thực thi lệnh này sẽ khởi động hệ thống tệp Hadoop của bạn.

$ start-dfs.sh

Sản lượng dự kiến ​​như sau:

10/24/14 21:37:56 
Starting namenodes on [localhost] 
localhost: starting namenode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-namenode-localhost.out 
localhost: starting datanode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-datanode-localhost.out 
Starting secondary namenodes [0.0.0.0]

Bước 3 - Xác minh Tập lệnh Sợi

Lệnh sau được sử dụng để bắt đầu tập lệnh sợi. Việc thực thi lệnh này sẽ bắt đầu các daemon sợi của bạn.

$ start-yarn.sh

Sản lượng dự kiến ​​như sau:

starting yarn daemons 
starting resourcemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out 
localhost: starting nodemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out

Bước 4 - Truy cập Hadoop trên trình duyệt

Số cổng mặc định để truy cập Hadoop là 50070. Sử dụng url sau để tải các dịch vụ Hadoop trên trình duyệt.

http://localhost:50070/

Bước 5 - Xác minh tất cả các ứng dụng cho cụm

Số cổng mặc định để truy cập tất cả các ứng dụng của cụm là 8088. Sử dụng url sau để truy cập dịch vụ này.

http://localhost:8088/

Hệ thống tệp Hadoop được phát triển bằng cách sử dụng thiết kế hệ thống tệp phân tán. Nó được chạy trên phần cứng hàng hóa. Không giống như các hệ thống phân tán khác, HDFS có khả năng chống lỗi cao và được thiết kế bằng phần cứng giá rẻ.

HDFS chứa một lượng lớn dữ liệu và cung cấp khả năng truy cập dễ dàng hơn. Để lưu trữ dữ liệu khổng lồ như vậy, các tệp được lưu trữ trên nhiều máy. Những tệp này được lưu trữ theo kiểu dự phòng để giải cứu hệ thống khỏi những mất mát dữ liệu có thể xảy ra trong trường hợp bị lỗi. HDFS cũng cung cấp các ứng dụng để xử lý song song.

Các tính năng của HDFS

  • Nó phù hợp cho việc lưu trữ và xử lý phân tán.
  • Hadoop cung cấp giao diện lệnh để tương tác với HDFS.
  • Các máy chủ tích hợp của nút tên và nút dữ liệu giúp người dùng dễ dàng kiểm tra trạng thái của cụm.
  • Truyền trực tuyến quyền truy cập vào dữ liệu hệ thống tệp.
  • HDFS cung cấp quyền và xác thực tệp.

Kiến trúc HDFS

Dưới đây là kiến ​​trúc của Hệ thống tệp Hadoop.

HDFS tuân theo kiến ​​trúc master-slave và nó có các yếu tố sau.

Nút tên

Nút tên là phần cứng hàng hóa có chứa hệ điều hành GNU / Linux và phần mềm nút tên. Nó là một phần mềm có thể chạy trên phần cứng hàng hóa. Hệ thống có nút tên hoạt động như máy chủ chính và nó thực hiện các nhiệm vụ sau:

  • Quản lý không gian tên hệ thống tệp.

  • Kiểm soát quyền truy cập của khách hàng vào tệp.

  • Nó cũng thực hiện các hoạt động của hệ thống tệp như đổi tên, đóng và mở tệp và thư mục.

Datanode

Datanode là một phần cứng hàng hóa có hệ điều hành GNU / Linux và phần mềm datanode. Đối với mỗi nút (Phần cứng hàng hóa / Hệ thống) trong một cụm, sẽ có một nút dữ liệu. Các nút này quản lý việc lưu trữ dữ liệu của hệ thống của họ.

  • Các nút dữ liệu thực hiện các thao tác đọc-ghi trên hệ thống tệp, theo yêu cầu của khách hàng.

  • Chúng cũng thực hiện các hoạt động như tạo khối, xóa và sao chép theo hướng dẫn của nút tên.

Khối

Nói chung, dữ liệu người dùng được lưu trữ trong các tệp HDFS. Tệp trong hệ thống tệp sẽ được chia thành một hoặc nhiều phân đoạn và / hoặc được lưu trữ trong các nút dữ liệu riêng lẻ. Các phân đoạn tệp này được gọi là khối. Nói cách khác, lượng dữ liệu tối thiểu mà HDFS có thể đọc hoặc ghi được gọi là Block. Kích thước khối mặc định là 64MB, nhưng nó có thể được tăng lên tùy theo nhu cầu thay đổi trong cấu hình HDFS.

Mục tiêu của HDFS

Fault detection and recovery- Vì HDFS bao gồm một số lượng lớn phần cứng hàng hóa nên việc hỏng hóc các thành phần là thường xuyên. Do đó HDFS cần có cơ chế phát hiện và phục hồi lỗi nhanh chóng và tự động.

Huge datasets - HDFS nên có hàng trăm nút trên mỗi cụm để quản lý các ứng dụng có bộ dữ liệu lớn.

Hardware at data- Một nhiệm vụ được yêu cầu có thể được thực hiện một cách hiệu quả, khi việc tính toán diễn ra gần dữ liệu. Đặc biệt là khi các bộ dữ liệu khổng lồ có liên quan, nó làm giảm lưu lượng mạng và tăng thông lượng.

Khởi động HDFS

Ban đầu, bạn phải định dạng hệ thống tệp HDFS đã định cấu hình, mở nút tên (máy chủ HDFS) và thực hiện lệnh sau.

$ hadoop namenode -format

Sau khi định dạng HDFS, hãy khởi động hệ thống tệp phân tán. Lệnh sau sẽ bắt đầu nút tên cũng như các nút dữ liệu dưới dạng cụm.

$ start-dfs.sh

Liệt kê tệp trong HDFS

Sau khi tải thông tin vào máy chủ, chúng ta có thể tìm thấy danh sách các tệp trong thư mục, trạng thái của tệp, sử dụng ‘ls’. Dưới đây là cú pháp củals mà bạn có thể chuyển đến một thư mục hoặc tên tệp làm đối số.

$ $HADOOP_HOME/bin/hadoop fs -ls <args>

Chèn dữ liệu vào HDFS

Giả sử chúng ta có dữ liệu trong tệp được gọi là file.txt trong hệ thống cục bộ, dữ liệu này phải được lưu trong hệ thống tệp hdfs. Làm theo các bước dưới đây để chèn tệp được yêu cầu vào hệ thống tệp Hadoop.

Bước 1

Bạn phải tạo một thư mục đầu vào.

$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/input

Bước 2

Chuyển và lưu trữ tệp dữ liệu từ hệ thống cục bộ sang hệ thống tệp Hadoop bằng lệnh put.

$ $HADOOP_HOME/bin/hadoop fs -put /home/file.txt /user/input

Bước 3

Bạn có thể xác minh tệp bằng lệnh ls.

$ $HADOOP_HOME/bin/hadoop fs -ls /user/input

Lấy dữ liệu từ HDFS

Giả sử chúng ta có một tệp trong HDFS được gọi là outfile. Dưới đây là một minh chứng đơn giản để lấy tệp cần thiết từ hệ thống tệp Hadoop.

Bước 1

Ban đầu, hãy xem dữ liệu từ HDFS bằng cách sử dụng cat chỉ huy.

$ $HADOOP_HOME/bin/hadoop fs -cat /user/output/outfile

Bước 2

Tải tệp từ HDFS sang hệ thống tệp cục bộ bằng cách sử dụng get chỉ huy.

$ $HADOOP_HOME/bin/hadoop fs -get /user/output/ /home/hadoop_tp/

Tắt HDFS

Bạn có thể tắt HDFS bằng cách sử dụng lệnh sau.

$ stop-dfs.sh

Có nhiều lệnh khác trong "$HADOOP_HOME/bin/hadoop fs"hơn được trình bày ở đây, mặc dù các thao tác cơ bản này sẽ giúp bạn bắt đầu. Chạy ./bin/hadoop dfs không có đối số bổ sung sẽ liệt kê tất cả các lệnh có thể chạy với hệ thống FsShell. Hơn nữa,$HADOOP_HOME/bin/hadoop fs -help commandName sẽ hiển thị một bản tóm tắt sử dụng ngắn cho thao tác được đề cập, nếu bạn gặp khó khăn.

Một bảng của tất cả các hoạt động được hiển thị dưới đây. Các quy ước sau được sử dụng cho các tham số:

"<path>" means any file or directory name. 
"<path>..." means one or more file or directory names. 
"<file>" means any filename. 
"<src>" and "<dest>" are path names in a directed operation. 
"<localSrc>" and "<localDest>" are paths as above, but on the local file system.

Tất cả các tệp và tên đường dẫn khác tham chiếu đến các đối tượng bên trong HDFS.

Sr.No Lệnh & Mô tả
1

-ls <path>

Liệt kê nội dung của thư mục được chỉ định theo đường dẫn, hiển thị tên, quyền, chủ sở hữu, kích thước và ngày sửa đổi cho mỗi mục nhập.

2

-lsr <path>

Hoạt động như -ls, nhưng hiển thị đệ quy các mục nhập trong tất cả các thư mục con của đường dẫn.

3

-du <path>

Hiển thị mức sử dụng đĩa, tính bằng byte, cho tất cả các tệp khớp với đường dẫn; tên tệp được báo cáo với tiền tố giao thức HDFS đầy đủ.

4

-dus <path>

Giống như -du, nhưng in một bản tóm tắt về việc sử dụng đĩa của tất cả các tệp / thư mục trong đường dẫn.

5

-mv <src><dest>

Di chuyển tệp hoặc thư mục được chỉ định bởi src đến đích, trong HDFS.

6

-cp <src> <dest>

Sao chép tệp hoặc thư mục được nhận dạng bởi src sang đích, trong HDFS.

7

-rm <path>

Xóa tệp hoặc thư mục trống được xác định bằng đường dẫn.

số 8

-rmr <path>

Xóa tệp hoặc thư mục được xác định bằng đường dẫn. Xóa đệ quy bất kỳ mục nhập con nào (tức là tệp hoặc thư mục con của đường dẫn).

9

-put <localSrc> <dest>

Sao chép tệp hoặc thư mục từ hệ thống tệp cục bộ được xác định bởi localSrc đến đích trong DFS.

10

-copyFromLocal <localSrc> <dest>

Đầu vào giống hệt nhau

11

-moveFromLocal <localSrc> <dest>

Copies the file or directory from the local file system identified by localSrc to dest within HDFS, and then deletes the local copy on success.

12

-get [-crc] <src> <localDest>

Copies the file or directory in HDFS identified by src to the local file system path identified by localDest.

13

-getmerge <src> <localDest>

Retrieves all files that match the path src in HDFS, and copies them to a single, merged file in the local file system identified by localDest.

14

-cat <filen-ame>

Displays the contents of filename on stdout.

15

-copyToLocal <src> <localDest>

Identical to -get

16

-moveToLocal <src> <localDest>

Works like -get, but deletes the HDFS copy on success.

17

-mkdir <path>

Creates a directory named path in HDFS.

Creates any parent directories in path that are missing (e.g., mkdir -p in Linux).

18

-setrep [-R] [-w] rep <path>

Sets the target replication factor for files identified by path to rep. (The actual replication factor will move toward the target over time)

19

-touchz <path>

Creates a file at path containing the current time as a timestamp. Fails if a file already exists at path, unless the file is already size 0.

20

-test -[ezd] <path>

Returns 1 if path exists; has zero length; or is a directory or 0 otherwise.

21

-stat [format] <path>

Prints information about path. Format is a string which accepts file size in blocks (%b), filename (%n), block size (%o), replication (%r), and modification date (%y, %Y).

22

-tail [-f] <file2name>

Shows the last 1KB of file on stdout.

23

-chmod [-R] mode,mode,... <path>...

Changes the file permissions associated with one or more objects identified by path.... Performs changes recursively with R. mode is a 3-digit octal mode, or {augo}+/-{rwxX}. Assumes if no scope is specified and does not apply an umask.

24

-chown [-R] [owner][:[group]] <path>...

Sets the owning user and/or group for files or directories identified by path.... Sets owner recursively if -R is specified.

25

-chgrp [-R] group <path>...

Sets the owning group for files or directories identified by path.... Sets group recursively if -R is specified.

26

-help <cmd-name>

Returns usage information for one of the commands listed above. You must omit the leading '-' character in cmd.

MapReduce is a framework using which we can write applications to process huge amounts of data, in parallel, on large clusters of commodity hardware in a reliable manner.

What is MapReduce?

MapReduce is a processing technique and a program model for distributed computing based on java. The MapReduce algorithm contains two important tasks, namely Map and Reduce. Map takes a set of data and converts it into another set of data, where individual elements are broken down into tuples (key/value pairs). Secondly, reduce task, which takes the output from a map as an input and combines those data tuples into a smaller set of tuples. As the sequence of the name MapReduce implies, the reduce task is always performed after the map job.

The major advantage of MapReduce is that it is easy to scale data processing over multiple computing nodes. Under the MapReduce model, the data processing primitives are called mappers and reducers. Decomposing a data processing application into mappers and reducers is sometimes nontrivial. But, once we write an application in the MapReduce form, scaling the application to run over hundreds, thousands, or even tens of thousands of machines in a cluster is merely a configuration change. This simple scalability is what has attracted many programmers to use the MapReduce model.

The Algorithm

  • Generally MapReduce paradigm is based on sending the computer to where the data resides!

  • MapReduce program executes in three stages, namely map stage, shuffle stage, and reduce stage.

    • Map stage − The map or mapper’s job is to process the input data. Generally the input data is in the form of file or directory and is stored in the Hadoop file system (HDFS). The input file is passed to the mapper function line by line. The mapper processes the data and creates several small chunks of data.

    • Reduce stage − This stage is the combination of the Shuffle stage and the Reduce stage. The Reducer’s job is to process the data that comes from the mapper. After processing, it produces a new set of output, which will be stored in the HDFS.

  • During a MapReduce job, Hadoop sends the Map and Reduce tasks to the appropriate servers in the cluster.

  • The framework manages all the details of data-passing such as issuing tasks, verifying task completion, and copying data around the cluster between the nodes.

  • Most of the computing takes place on nodes with data on local disks that reduces the network traffic.

  • After completion of the given tasks, the cluster collects and reduces the data to form an appropriate result, and sends it back to the Hadoop server.

Inputs and Outputs (Java Perspective)

The MapReduce framework operates on <key, value> pairs, that is, the framework views the input to the job as a set of <key, value> pairs and produces a set of <key, value> pairs as the output of the job, conceivably of different types.

The key and the value classes should be in serialized manner by the framework and hence, need to implement the Writable interface. Additionally, the key classes have to implement the Writable-Comparable interface to facilitate sorting by the framework. Input and Output types of a MapReduce job − (Input) <k1, v1> → map → <k2, v2> → reduce → <k3, v3>(Output).

Input Output
Map <k1, v1> list (<k2, v2>)
Reduce <k2, list(v2)> list (<k3, v3>)

Terminology

  • PayLoad − Applications implement the Map and the Reduce functions, and form the core of the job.

  • Mapper − Mapper maps the input key/value pairs to a set of intermediate key/value pair.

  • NamedNode − Node that manages the Hadoop Distributed File System (HDFS).

  • DataNode − Node where data is presented in advance before any processing takes place.

  • MasterNode − Node where JobTracker runs and which accepts job requests from clients.

  • SlaveNode − Node where Map and Reduce program runs.

  • JobTracker − Schedules jobs and tracks the assign jobs to Task tracker.

  • Task Tracker − Tracks the task and reports status to JobTracker.

  • Job − A program is an execution of a Mapper and Reducer across a dataset.

  • Task − An execution of a Mapper or a Reducer on a slice of data.

  • Task Attempt − A particular instance of an attempt to execute a task on a SlaveNode.

Example Scenario

Given below is the data regarding the electrical consumption of an organization. It contains the monthly electrical consumption and the annual average for various years.

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Avg
1979 23 23 2 43 24 25 26 26 26 26 25 26 25
1980 26 27 28 28 28 30 31 31 31 30 30 30 29
1981 31 32 32 32 33 34 35 36 36 34 34 34 34
1984 39 38 39 39 39 41 42 43 40 39 38 38 40
1985 38 39 39 39 39 41 41 41 00 40 39 39 45

If the above data is given as input, we have to write applications to process it and produce results such as finding the year of maximum usage, year of minimum usage, and so on. This is a walkover for the programmers with finite number of records. They will simply write the logic to produce the required output, and pass the data to the application written.

But, think of the data representing the electrical consumption of all the largescale industries of a particular state, since its formation.

When we write applications to process such bulk data,

  • They will take a lot of time to execute.

  • There will be a heavy network traffic when we move data from source to network server and so on.

To solve these problems, we have the MapReduce framework.

Input Data

The above data is saved as sample.txtand given as input. The input file looks as shown below.

1979   23   23   2   43   24   25   26   26   26   26   25   26  25 
1980   26   27   28  28   28   30   31   31   31   30   30   30  29 
1981   31   32   32  32   33   34   35   36   36   34   34   34  34 
1984   39   38   39  39   39   41   42   43   40   39   38   38  40 
1985   38   39   39  39   39   41   41   41   00   40   39   39  45

Example Program

Given below is the program to the sample data using MapReduce framework.

package hadoop; 

import java.util.*; 

import java.io.IOException; 
import java.io.IOException; 

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapred.*; 
import org.apache.hadoop.util.*; 

public class ProcessUnits {
   //Mapper class 
   public static class E_EMapper extends MapReduceBase implements 
   Mapper<LongWritable ,/*Input key Type */ 
   Text,                /*Input value Type*/ 
   Text,                /*Output key Type*/ 
   IntWritable>        /*Output value Type*/ 
   {
      //Map function 
      public void map(LongWritable key, Text value, 
      OutputCollector<Text, IntWritable> output,   
      
      Reporter reporter) throws IOException { 
         String line = value.toString(); 
         String lasttoken = null; 
         StringTokenizer s = new StringTokenizer(line,"\t"); 
         String year = s.nextToken(); 
         
         while(s.hasMoreTokens()) {
            lasttoken = s.nextToken();
         }
         int avgprice = Integer.parseInt(lasttoken); 
         output.collect(new Text(year), new IntWritable(avgprice)); 
      } 
   }
   
   //Reducer class 
   public static class E_EReduce extends MapReduceBase implements Reducer< Text, IntWritable, Text, IntWritable > {
   
      //Reduce function 
      public void reduce( Text key, Iterator <IntWritable> values, 
      OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { 
         int maxavg = 30; 
         int val = Integer.MIN_VALUE; 
            
         while (values.hasNext()) { 
            if((val = values.next().get())>maxavg) { 
               output.collect(key, new IntWritable(val)); 
            } 
         }
      } 
   }

   //Main function 
   public static void main(String args[])throws Exception { 
      JobConf conf = new JobConf(ProcessUnits.class); 
      
      conf.setJobName("max_eletricityunits"); 
      conf.setOutputKeyClass(Text.class);
      conf.setOutputValueClass(IntWritable.class); 
      conf.setMapperClass(E_EMapper.class); 
      conf.setCombinerClass(E_EReduce.class); 
      conf.setReducerClass(E_EReduce.class); 
      conf.setInputFormat(TextInputFormat.class); 
      conf.setOutputFormat(TextOutputFormat.class); 
      
      FileInputFormat.setInputPaths(conf, new Path(args[0])); 
      FileOutputFormat.setOutputPath(conf, new Path(args[1])); 
      
      JobClient.runJob(conf); 
   } 
}

Lưu chương trình trên thành ProcessUnits.java. Việc biên dịch và thực thi chương trình được giải thích dưới đây.

Biên soạn và Thực hiện Chương trình Đơn vị Quy trình

Giả sử chúng ta đang ở trong thư mục chính của người dùng Hadoop (ví dụ: / home / hadoop).

Làm theo các bước dưới đây để biên dịch và thực thi chương trình trên.

Bước 1

Lệnh sau là tạo một thư mục để lưu trữ các lớp java đã biên dịch.

$ mkdir units

Bước 2

Tải xuống Hadoop-core-1.2.1.jar,được sử dụng để biên dịch và thực thi chương trình MapReduce. Truy cập liên kết sau mvnrepository.com để tải về jar. Giả sử thư mục đã tải xuống là/home/hadoop/.

Bước 3

Các lệnh sau được sử dụng để biên dịch ProcessUnits.java chương trình và tạo một jar cho chương trình.

$ javac -classpath hadoop-core-1.2.1.jar -d units ProcessUnits.java 
$ jar -cvf units.jar -C units/ .

Bước 4

Lệnh sau được sử dụng để tạo thư mục đầu vào trong HDFS.

$HADOOP_HOME/bin/hadoop fs -mkdir input_dir

Bước 5

Lệnh sau được sử dụng để sao chép tệp đầu vào có tên sample.txttrong thư mục đầu vào của HDFS.

$HADOOP_HOME/bin/hadoop fs -put /home/hadoop/sample.txt input_dir

Bước 6

Lệnh sau được sử dụng để xác minh các tệp trong thư mục đầu vào.

$HADOOP_HOME/bin/hadoop fs -ls input_dir/

Bước 7

Lệnh sau được sử dụng để chạy ứng dụng Eleunit_max bằng cách lấy các tệp đầu vào từ thư mục đầu vào.

$HADOOP_HOME/bin/hadoop jar units.jar hadoop.ProcessUnits input_dir output_dir

Chờ một lúc cho đến khi tệp được thực thi. Sau khi thực hiện, như hình dưới đây, đầu ra sẽ chứa số lượng đầu vào chia tách, số lượng tác vụ Bản đồ, số lượng tác vụ giảm tốc, v.v.

INFO mapreduce.Job: Job job_1414748220717_0002 
completed successfully 
14/10/31 06:02:52 
INFO mapreduce.Job: Counters: 49 
   File System Counters 
 
FILE: Number of bytes read = 61 
FILE: Number of bytes written = 279400 
FILE: Number of read operations = 0 
FILE: Number of large read operations = 0   
FILE: Number of write operations = 0 
HDFS: Number of bytes read = 546 
HDFS: Number of bytes written = 40 
HDFS: Number of read operations = 9 
HDFS: Number of large read operations = 0 
HDFS: Number of write operations = 2 Job Counters 


   Launched map tasks = 2  
   Launched reduce tasks = 1 
   Data-local map tasks = 2  
   Total time spent by all maps in occupied slots (ms) = 146137 
   Total time spent by all reduces in occupied slots (ms) = 441   
   Total time spent by all map tasks (ms) = 14613 
   Total time spent by all reduce tasks (ms) = 44120 
   Total vcore-seconds taken by all map tasks = 146137 
   Total vcore-seconds taken by all reduce tasks = 44120 
   Total megabyte-seconds taken by all map tasks = 149644288 
   Total megabyte-seconds taken by all reduce tasks = 45178880 
   
Map-Reduce Framework 
 
   Map input records = 5  
   Map output records = 5   
   Map output bytes = 45  
   Map output materialized bytes = 67  
   Input split bytes = 208 
   Combine input records = 5  
   Combine output records = 5 
   Reduce input groups = 5  
   Reduce shuffle bytes = 6  
   Reduce input records = 5  
   Reduce output records = 5  
   Spilled Records = 10  
   Shuffled Maps  = 2  
   Failed Shuffles = 0  
   Merged Map outputs = 2  
   GC time elapsed (ms) = 948  
   CPU time spent (ms) = 5160  
   Physical memory (bytes) snapshot = 47749120  
   Virtual memory (bytes) snapshot = 2899349504  
   Total committed heap usage (bytes) = 277684224
     
File Output Format Counters 
 
   Bytes Written = 40

Bước 8

Lệnh sau được sử dụng để xác minh các tệp kết quả trong thư mục đầu ra.

$HADOOP_HOME/bin/hadoop fs -ls output_dir/

Bước 9

Lệnh sau được sử dụng để xem kết quả đầu ra trong Part-00000 tập tin. Tệp này được tạo bởi HDFS.

$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000

Dưới đây là kết quả do chương trình MapReduce tạo ra.

1981    34 
1984    40 
1985    45

Bước 10

Lệnh sau được sử dụng để sao chép thư mục đầu ra từ HDFS sang hệ thống tệp cục bộ để phân tích.

$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000/bin/hadoop dfs get output_dir /home/hadoop

Các lệnh quan trọng

Tất cả các lệnh Hadoop được gọi bởi $HADOOP_HOME/bin/hadoopchỉ huy. Chạy tập lệnh Hadoop mà không có bất kỳ đối số nào sẽ in mô tả cho tất cả các lệnh.

Usage - hadoop [--config confdir] COMMAND

Bảng sau liệt kê các tùy chọn có sẵn và mô tả của chúng.

Sr.No. Tùy chọn & Mô tả
1

namenode -format

Định dạng hệ thống tệp DFS.

2

secondarynamenode

Chạy nút tên phụ DFS.

3

namenode

Chạy nút tên DFS.

4

datanode

Chạy một nút dữ liệu DFS.

5

dfsadmin

Chạy ứng dụng quản trị DFS.

6

mradmin

Chạy ứng dụng quản trị Map-Reduce.

7

fsck

Chạy tiện ích kiểm tra hệ thống tệp DFS.

số 8

fs

Chạy một máy khách người dùng hệ thống tệp chung.

9

balancer

Chạy tiện ích cân bằng cụm.

10

oiv

Áp dụng trình xem fsimage ngoại tuyến cho fsimage.

11

fetchdt

Tìm nạp mã thông báo ủy quyền từ NameNode.

12

jobtracker

Chạy nút MapReduce job Tracker.

13

pipes

Chạy công việc Pipes.

14

tasktracker

Chạy một nút Trình theo dõi tác vụ MapReduce.

15

historyserver

Chạy các máy chủ lịch sử công việc như một daemon độc lập.

16

job

Thao tác các công việc MapReduce.

17

queue

Nhận thông tin về JobQueues.

18

version

In phiên bản.

19

jar <jar>

Chạy một tệp jar.

20

distcp <srcurl> <desturl>

Sao chép tệp hoặc thư mục một cách đệ quy.

21

distcp2 <srcurl> <desturl>

Phiên bản DistCp 2.

22

archive -archiveName NAME -p <parent path> <src>* <dest>

Tạo một kho lưu trữ hadoop.

23

classpath

In đường dẫn lớp cần thiết để lấy Hadoop jar và các thư viện bắt buộc.

24

daemonlog

Nhận / Đặt cấp độ nhật ký cho mỗi daemon

Cách tương tác với MapReduce Jobs

Sử dụng - công việc hadoop [GENERIC_OPTIONS]

Sau đây là các Tùy chọn Chung có sẵn trong công việc Hadoop.

Sr.No. GENERIC_OPTION & Mô tả
1

-submit <job-file>

Nộp công việc.

2

-status <job-id>

In bản đồ và giảm tỷ lệ phần trăm hoàn thành và tất cả các quầy công việc.

3

-counter <job-id> <group-name> <countername>

In giá trị bộ đếm.

4

-kill <job-id>

Giết công việc.

5

-events <job-id> <fromevent-#> <#-of-events>

In các chi tiết của sự kiện mà trình theo dõi công việc nhận được cho phạm vi đã cho.

6

-history [all] <jobOutputDir> - history < jobOutputDir>

In chi tiết công việc, chi tiết mẹo bị lỗi và bị chết. Có thể xem thêm thông tin chi tiết về công việc, chẳng hạn như các nhiệm vụ thành công và các nỗ lực thực hiện cho từng nhiệm vụ bằng cách chỉ định tùy chọn [tất cả].

7

-list[all]

Hiển thị tất cả các công việc. -danh sách chỉ hiển thị các công việc chưa hoàn thành.

số 8

-kill-task <task-id>

Giết nhiệm vụ. Các nhiệm vụ bị giết KHÔNG được tính vào các lần thử không thành công.

9

-fail-task <task-id>

Không hoàn thành nhiệm vụ. Các nhiệm vụ không thành công được tính cho các lần không thành công.

10

-set-priority <job-id> <priority>

Thay đổi mức độ ưu tiên của công việc. Các giá trị ưu tiên được phép là VERY_HIGH, HIGH, NORMAL, LOW, VERY_LOW

Để xem tình trạng công việc

$ $HADOOP_HOME/bin/hadoop job -status <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -status job_201310191043_0004

Để xem lịch sử công việc đầu ra-dir

$ $HADOOP_HOME/bin/hadoop job -history <DIR-NAME> e.g. $ $HADOOP_HOME/bin/hadoop job -history /user/expert/output

Giết công việc

$ $HADOOP_HOME/bin/hadoop job -kill <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -kill job_201310191043_0004

Phát trực tuyến Hadoop là một tiện ích đi kèm với bản phân phối Hadoop. Tiện ích này cho phép bạn tạo và chạy các công việc Bản đồ / Rút gọn với bất kỳ tệp thực thi hoặc tập lệnh nào dưới dạng trình ánh xạ và / hoặc trình giảm thiểu.

Ví dụ sử dụng Python

Đối với truyền trực tuyến Hadoop, chúng tôi đang xem xét vấn đề đếm từ. Bất kỳ công việc nào trong Hadoop đều phải có hai giai đoạn: lập bản đồ và giảm tốc. Chúng tôi đã viết mã cho trình liên kết và trình rút gọn trong tập lệnh python để chạy nó trong Hadoop. Người ta cũng có thể viết như vậy trong Perl và Ruby.

Mã giai đoạn lập bản đồ

!/usr/bin/python

import sys

# Input takes from standard input for myline in sys.stdin: 
   # Remove whitespace either side 
   myline = myline.strip() 

   # Break the line into words 
   words = myline.split() 

   # Iterate the words list
   for myword in words:
      # Write the results to standard output 
      print '%s\t%s' % (myword, 1)

Đảm bảo rằng tệp này có quyền thực thi (chmod + x / home / Expert / hadoop-1.2.1 / mapper.py).

Mã pha giảm tốc

#!/usr/bin/python

from operator import itemgetter 
import sys 

current_word = ""
current_count = 0 
word = "" 

# Input takes from standard input for myline in sys.stdin: 
   # Remove whitespace either side 
   myline = myline.strip() 

   # Split the input we got from mapper.py word, 
   count = myline.split('\t', 1) 

   # Convert count variable to integer 
   try: 
      count = int(count) 

   except ValueError: 
      # Count was not a number, so silently ignore this line continue

   if current_word == word: 
   current_count += count 
   else: 
      if current_word: 
         # Write result to standard output print '%s\t%s' % (current_word, current_count) 
   
      current_count = count
      current_word = word

# Do not forget to output the last word if needed! 
if current_word == word: 
   print '%s\t%s' % (current_word, current_count)

Lưu mã trình liên kết và mã giảm thiểu trong mapper.py và Reduceer.py trong thư mục chính Hadoop. Đảm bảo rằng các tệp này có quyền thực thi (chmod + x mapper.py và chmod + x Reduceer.py). Vì python nhạy cảm với thụt đầu dòng nên bạn có thể tải xuống mã tương tự từ liên kết bên dưới.

Thực thi chương trình WordCount

$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1.
2.1.jar \
   -input input_dirs \ 
   -output output_dir \ 
   -mapper <path/mapper.py \ 
   -reducer <path/reducer.py

Trong đó "\" được sử dụng để tiếp tục dòng để dễ đọc.

Ví dụ,

./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper /home/expert/hadoop-1.2.1/mapper.py -reducer /home/expert/hadoop-1.2.1/reducer.py

Cách phát trực tuyến hoạt động

Trong ví dụ trên, cả trình ánh xạ và trình giảm thiểu đều là tập lệnh python đọc đầu vào từ đầu vào tiêu chuẩn và phát ra đầu ra thành đầu ra tiêu chuẩn. Tiện ích sẽ tạo một Bản đồ / Rút gọn công việc, gửi công việc đến một cụm thích hợp và theo dõi tiến trình của công việc cho đến khi hoàn thành.

Khi một tập lệnh được chỉ định cho người lập bản đồ, mỗi tác vụ ánh xạ sẽ khởi chạy tập lệnh đó như một quá trình riêng biệt khi trình ánh xạ được khởi tạo. Khi tác vụ ánh xạ chạy, nó chuyển đổi các đầu vào của nó thành các dòng và đưa các dòng tới đầu vào chuẩn (STDIN) của quy trình. Trong khi chờ đợi, trình ánh xạ thu thập các đầu ra hướng dòng từ đầu ra chuẩn (STDOUT) của quy trình và chuyển đổi mỗi dòng thành một cặp khóa / giá trị, được thu thập dưới dạng đầu ra của trình ánh xạ. Theo mặc định, tiền tố của một dòng tính đến ký tự tab đầu tiên là khóa và phần còn lại của dòng (không bao gồm ký tự tab) sẽ là giá trị. Nếu không có ký tự tab nào trong dòng, thì toàn bộ dòng được coi là khóa và giá trị là null. Tuy nhiên, điều này có thể được tùy chỉnh, theo nhu cầu.

Khi một tập lệnh được chỉ định cho các bộ giảm, mỗi tác vụ bộ giảm sẽ khởi chạy tập lệnh như một quá trình riêng biệt, sau đó bộ giảm thiểu được khởi tạo. Khi tác vụ giảm tốc chạy, nó chuyển đổi các cặp khóa / giá trị đầu vào của nó thành các dòng và chuyển các dòng tới đầu vào tiêu chuẩn (STDIN) của quy trình. Trong khi đó, bộ giảm tốc thu thập các đầu ra hướng dòng từ đầu ra chuẩn (STDOUT) của quy trình, chuyển đổi mỗi dòng thành một cặp khóa / giá trị, cặp này được thu thập làm đầu ra của bộ giảm tốc. Theo mặc định, tiền tố của một dòng tính đến ký tự tab đầu tiên là khóa và phần còn lại của dòng (không bao gồm ký tự tab) là giá trị. Tuy nhiên, điều này có thể được tùy chỉnh theo yêu cầu cụ thể.

Các lệnh quan trọng

Thông số Tùy chọn Sự miêu tả
-input thư mục / tệp-tên Cần thiết Nhập vị trí cho người lập bản đồ.
-output thư mục-tên Cần thiết Vị trí đầu ra cho bộ giảm tốc.
-mapper thực thi hoặc tập lệnh hoặc JavaClassName Cần thiết Bản đồ có thể thực thi.
-reducer thực thi hoặc tập lệnh hoặc JavaClassName Cần thiết Bộ giảm tốc có thể thực thi.
-tệp-tên tệp Không bắt buộc Làm cho trình ánh xạ, trình giảm thiểu hoặc trình kết hợp có thể thực thi được cục bộ trên các nút tính toán.
-inputformat JavaClassName Không bắt buộc Lớp bạn cung cấp phải trả về các cặp khóa / giá trị của lớp Văn bản. Nếu không được chỉ định, TextInputFormat được sử dụng làm mặc định.
-outputformat JavaClassName Không bắt buộc Lớp bạn cung cấp phải lấy các cặp khóa / giá trị của lớp Văn bản. Nếu không được chỉ định, TextOutputformat được sử dụng làm mặc định.
-partitioner JavaClassName Không bắt buộc Lớp xác định khóa giảm được gửi đến.
-combiner streamingCommand hoặc JavaClassName Không bắt buộc Combiner có thể thực thi cho đầu ra bản đồ.
-cmdenv name = giá trị Không bắt buộc Truyền biến môi trường cho các lệnh truyền trực tuyến.
-inputreader Không bắt buộc Để tương thích ngược: chỉ định lớp trình đọc bản ghi (thay vì lớp định dạng đầu vào).
-bèo thuyền Không bắt buộc Báo cáo dài dòng.
-lazyOutput Không bắt buộc Tạo đầu ra một cách lười biếng. Ví dụ: nếu định dạng đầu ra dựa trên FileOutputFormat, thì tệp đầu ra chỉ được tạo trong lần gọi đầu tiên tới output.collect (hoặc Context.write).
-numReduceTasks Không bắt buộc Chỉ định số lượng bộ giảm.
-mapdebug Không bắt buộc Tập lệnh gọi khi tác vụ bản đồ không thành công.
-reducedebug Không bắt buộc Tập lệnh để gọi khi tác vụ giảm không thành công.

Chương này giải thích cách thiết lập cụm Đa nút Hadoop trên môi trường phân tán.

Vì không thể chứng minh toàn bộ cụm, chúng tôi đang giải thích môi trường cụm Hadoop bằng cách sử dụng ba hệ thống (một chủ và hai nô lệ); dưới đây là địa chỉ IP của họ.

  • Hadoop Master: 192.168.1.15 (hadoop-master)
  • Hadoop Slave: 192.168.1.16 (hadoop-slave-1)
  • Hadoop Slave: 192.168.1.17 (hadoop-slave-2)

Làm theo các bước dưới đây để thiết lập cụm Đa nút Hadoop.

Cài đặt Java

Java là điều kiện tiên quyết chính cho Hadoop. Trước hết, bạn nên xác minh sự tồn tại của java trong hệ thống của mình bằng cách sử dụng “java -version”. Cú pháp của lệnh phiên bản java được đưa ra dưới đây.

$ java -version

Nếu mọi thứ hoạt động tốt, nó sẽ cung cấp cho bạn kết quả sau.

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

Nếu java chưa được cài đặt trong hệ thống của bạn, hãy làm theo các bước đã cho để cài đặt java.

Bước 1

Tải xuống java (JDK <phiên bản mới nhất> - X64.tar.gz) bằng cách truy cập liên kết sau www.oracle.com

Sau đó jdk-7u71-linux-x64.tar.gz sẽ được tải xuống hệ thống của bạn.

Bước 2

Nói chung, bạn sẽ tìm thấy tệp java đã tải xuống trong thư mục Tải xuống. Xác minh nó và trích xuấtjdk-7u71-linux-x64.gz sử dụng các lệnh sau.

$ cd Downloads/ $ ls
jdk-7u71-Linux-x64.gz

$ tar zxf jdk-7u71-Linux-x64.gz $ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz

Bước 3

Để cung cấp java cho tất cả người dùng, bạn phải di chuyển nó đến vị trí “/ usr / local /”. Mở thư mục gốc và nhập các lệnh sau.

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

Bước 4

Để thiết lập PATHJAVA_HOME biến, thêm các lệnh sau vào ~/.bashrc tập tin.

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin

Bây giờ xác minh java -versionlệnh từ thiết bị đầu cuối như đã giải thích ở trên. Làm theo quy trình trên và cài đặt java trong tất cả các nút cụm của bạn.

Tạo tài khoản người dùng

Tạo tài khoản người dùng hệ thống trên cả hệ thống chủ và hệ thống phụ để sử dụng cài đặt Hadoop.

# useradd hadoop 
# passwd hadoop

Lập bản đồ các nút

Bạn phải chỉnh sửa hosts trong tập tin /etc/ thư mục trên tất cả các nút, chỉ định địa chỉ IP của từng hệ thống theo sau là tên máy chủ của chúng.

# vi /etc/hosts
enter the following lines in the /etc/hosts file.

192.168.1.109 hadoop-master 
192.168.1.145 hadoop-slave-1 
192.168.56.1 hadoop-slave-2

Định cấu hình đăng nhập dựa trên khóa

Thiết lập ssh trong mọi nút để chúng có thể giao tiếp với nhau mà không cần bất kỳ lời nhắc nào về mật khẩu.

# su hadoop 
$ ssh-keygen -t rsa $ ssh-copy-id -i ~/.ssh/id_rsa.pub tutorialspoint@hadoop-master 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1 $ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2 
$ chmod 0600 ~/.ssh/authorized_keys $ exit

Cài đặt Hadoop

Trong máy chủ Chính, tải xuống và cài đặt Hadoop bằng các lệnh sau.

# mkdir /opt/hadoop 
# cd /opt/hadoop/ 
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz 
# tar -xzf hadoop-1.2.0.tar.gz 
# mv hadoop-1.2.0 hadoop
# chown -R hadoop /opt/hadoop 
# cd /opt/hadoop/hadoop/

Định cấu hình Hadoop

Bạn phải định cấu hình máy chủ Hadoop bằng cách thực hiện các thay đổi sau như được cung cấp bên dưới.

core-site.xml

Mở core-site.xml và chỉnh sửa nó như hình dưới đây.

<configuration>
   <property> 
      <name>fs.default.name</name> 
      <value>hdfs://hadoop-master:9000/</value> 
   </property> 
   <property> 
      <name>dfs.permissions</name> 
      <value>false</value> 
   </property> 
</configuration>

hdfs-site.xml

Mở hdfs-site.xml và chỉnh sửa nó như hình dưới đây.

<configuration>
   <property> 
      <name>dfs.data.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name/data</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.name.dir</name> 
      <value>/opt/hadoop/hadoop/dfs/name</value> 
      <final>true</final> 
   </property> 

   <property> 
      <name>dfs.replication</name> 
      <value>1</value> 
   </property> 
</configuration>

mapred-site.xml

Mở mapred-site.xml và chỉnh sửa nó như hình dưới đây.

<configuration>
   <property> 
      <name>mapred.job.tracker</name> 
      <value>hadoop-master:9001</value> 
   </property> 
</configuration>

hadoop-env.sh

Mở hadoop-env.sh và chỉnh sửa JAVA_HOME, HADOOP_CONF_DIR và HADOOP_OPTS như hình dưới đây.

Note - Đặt JAVA_HOME theo cấu hình hệ thống của bạn.

export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf

Cài đặt Hadoop trên Máy chủ Slave

Cài đặt Hadoop trên tất cả các máy chủ nô lệ bằng cách làm theo các lệnh đã cho.

# su hadoop 
$ cd /opt/hadoop $ scp -r hadoop hadoop-slave-1:/opt/hadoop 
$ scp -r hadoop hadoop-slave-2:/opt/hadoop

Cấu hình Hadoop trên Master Server

Mở máy chủ chính và cấu hình nó bằng cách làm theo các lệnh đã cho.

# su hadoop 
$ cd /opt/hadoop/hadoop

Định cấu hình nút chính

$ vi etc/hadoop/masters

hadoop-master

Định cấu hình nút nô lệ

$ vi etc/hadoop/slaves

hadoop-slave-1 
hadoop-slave-2

Định dạng nút tên trên Hadoop Master

# su hadoop 
$ cd /opt/hadoop/hadoop $ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG: host = hadoop-master/192.168.1.109 
STARTUP_MSG: args = [-format] 
STARTUP_MSG: version = 1.2.0 
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;
compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013 
STARTUP_MSG: java = 1.7.0_71 

************************************************************/
11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap
editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
…………………………………………………. 
11/10/14 10:58:08 INFO common.Storage: Storage directory 
/opt/hadoop/hadoop/dfs/name has been successfully formatted.
11/10/14 10:58:08 INFO namenode.NameNode: 
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15
************************************************************/

Bắt đầu dịch vụ Hadoop

Lệnh sau đây là khởi động tất cả các dịch vụ Hadoop trên Hadoop-Master.

$ cd $HADOOP_HOME/sbin
$ start-all.sh

Thêm một mã dữ liệu mới trong cụm Hadoop

Dưới đây là các bước cần thực hiện để thêm các nút mới vào một cụm Hadoop.

Kết nối mạng

Thêm các nút mới vào cụm Hadoop hiện có với một số cấu hình mạng thích hợp. Giả sử cấu hình mạng sau.

Đối với cấu hình nút mới -

IP address : 192.168.1.103 
netmask : 255.255.255.0
hostname : slave3.in

Thêm người dùng và quyền truy cập SSH

Thêm người dùng

Trên một nút mới, thêm người dùng "hadoop" và đặt mật khẩu của người dùng Hadoop thành "hadoop123" hoặc bất kỳ thứ gì bạn muốn bằng cách sử dụng các lệnh sau.

useradd hadoop
passwd hadoop

Thiết lập Mật khẩu ít kết nối từ chủ sang nô lệ mới.

Thực thi những điều sau trên bản gốc

mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa 
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub [email protected]:/home/hadoop/

Thực hiện những điều sau trên nô lệ

Đăng nhập hadoop. Nếu không, hãy đăng nhập vào người dùng hadoop.

su hadoop ssh -X [email protected]

Sao chép nội dung của khóa công khai vào tệp "$HOME/.ssh/authorized_keys" và sau đó thay đổi quyền tương tự bằng cách thực hiện các lệnh sau.

cd $HOME mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh cat id_rsa.pub >>$HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys

Kiểm tra đăng nhập ssh từ máy chủ. Bây giờ hãy kiểm tra xem bạn có thể ssh đến nút mới mà không cần mật khẩu từ chủ hay không.

ssh [email protected] or hadoop@slave3

Đặt tên máy chủ của nút mới

Bạn có thể đặt tên máy chủ trong tệp /etc/sysconfig/network

On new slave3 machine

NETWORKING = yes 
HOSTNAME = slave3.in

Để thực hiện các thay đổi có hiệu lực, hãy khởi động lại máy hoặc chạy lệnh tên máy chủ đến một máy mới có tên máy chủ tương ứng (khởi động lại là một lựa chọn tốt).

Trên máy nút slave3 -

tên máy chủ slave3.in

Cập nhật /etc/hosts trên tất cả các máy của cụm với các dòng sau:

192.168.1.102 slave3.in slave3

Bây giờ hãy thử ping máy bằng tên máy chủ để kiểm tra xem nó có phân giải thành IP hay không.

Trên máy nút mới -

ping master.in

Khởi động DataNode trên New Node

Khởi động trình nền datanode theo cách thủ công bằng cách sử dụng $HADOOP_HOME/bin/hadoop-daemon.sh script. Nó sẽ tự động liên hệ với master (NameNode) và tham gia vào cụm. Chúng ta cũng nên thêm nút mới vào tệp conf / slave trong máy chủ chính. Các lệnh dựa trên tập lệnh sẽ nhận ra nút mới.

Đăng nhập vào nút mới

su hadoop or ssh -X [email protected]

Khởi động HDFS trên một nút nô lệ mới được thêm bằng cách sử dụng lệnh sau

./bin/hadoop-daemon.sh start datanode

Kiểm tra đầu ra của lệnh jps trên một nút mới. Nó trông như sau.

$ jps
7141 DataNode
10312 Jps

Xóa Mã dữ liệu khỏi Cụm Hadoop

Chúng tôi có thể xóa một nút khỏi cụm một cách nhanh chóng, trong khi nó đang chạy mà không bị mất dữ liệu. HDFS cung cấp một tính năng ngừng hoạt động, đảm bảo rằng việc loại bỏ một nút được thực hiện một cách an toàn. Để sử dụng nó, hãy làm theo các bước như dưới đây:

Bước 1 - Đăng nhập để làm chủ

Đăng nhập vào người dùng máy chính nơi Hadoop được cài đặt.

$ su hadoop

Bước 2 - Thay đổi cấu hình cụm

Một tệp loại trừ phải được định cấu hình trước khi bắt đầu cụm. Thêm khóa có tên dfs.hosts.exclude vào$HADOOP_HOME/etc/hadoop/hdfs-site.xmltập tin. Giá trị được liên kết với khóa này cung cấp đường dẫn đầy đủ đến một tệp trên hệ thống tệp cục bộ của NameNode chứa danh sách các máy không được phép kết nối với HDFS.

Ví dụ: thêm các dòng này vào etc/hadoop/hdfs-site.xml tập tin.

<property> 
   <name>dfs.hosts.exclude</name> 
   <value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value> 
   <description>DFS exclude</description> 
</property>

Bước 3 - Xác định máy chủ để ngừng hoạt động

Mỗi máy sẽ ngừng hoạt động phải được thêm vào tệp được xác định bởi hdfs_exclude.txt, một tên miền trên mỗi dòng. Điều này sẽ ngăn chúng kết nối với NameNode. Nội dung của"/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" tệp được hiển thị bên dưới, nếu bạn muốn loại bỏ DataNode2.

slave2.in

Bước 4 - Buộc tải lại cấu hình

Chạy lệnh "$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes" mà không có dấu ngoặc kép.

$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes

Điều này sẽ buộc NameNode đọc lại cấu hình của nó, bao gồm cả tệp 'loại trừ' mới được cập nhật. Nó sẽ ngừng truyền các nút trong một khoảng thời gian, cho phép thời gian để các khối của mỗi nút được sao chép vào các máy được lên lịch để duy trì hoạt động.

Trên slave2.in, kiểm tra đầu ra lệnh jps. Sau một thời gian, bạn sẽ thấy quá trình DataNode tự động tắt.

Bước 5 - Tắt các nút

Sau khi quá trình ngừng hoạt động hoàn tất, phần cứng ngừng hoạt động có thể được tắt an toàn để bảo trì. Chạy lệnh báo cáo đến dfsadmin để kiểm tra trạng thái ngừng hoạt động. Lệnh sau đây sẽ mô tả trạng thái của nút ngắt và các nút được kết nối với cụm.

$ $HADOOP_HOME/bin/hadoop dfsadmin -report

Bước 6 - Chỉnh sửa lại tệp loại trừ

Khi máy đã ngừng hoạt động, chúng có thể bị xóa khỏi tệp 'loại trừ'. Đang chạy"$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes"một lần nữa sẽ đọc lại tệp loại trừ vào Mã tên; cho phép các Mã dữ liệu tham gia lại cụm sau khi bảo trì xong hoặc cần thêm dung lượng trong cụm lần nữa, v.v.

Special Note- Nếu quá trình trên được tuân thủ và quá trình trình chạy tác vụ vẫn đang chạy trên nút, nó cần phải được tắt. Có một cách là ngắt kết nối máy như chúng ta đã làm ở các bước trên. Master sẽ tự động nhận ra tiến trình và sẽ tuyên bố là đã chết. Không cần phải làm theo cùng một quy trình để xóa tasktracker vì nó KHÔNG quan trọng nhiều so với DataNode. DataNode chứa dữ liệu mà bạn muốn xóa một cách an toàn mà không làm mất dữ liệu.

Tasktracker có thể được chạy / tắt nhanh chóng bằng lệnh sau đây vào bất kỳ thời điểm nào.

$ $HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker $HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker